{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from transformer_lens import HookedTransformer\n",
    "import numpy as np"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load Dictionaries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using pad_token, but it is not set yet.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loaded pretrained model EleutherAI/pythia-70m-deduped into HookedTransformer\n"
     ]
    }
   ],
   "source": [
    "import pickle\n",
    "from torch import nn\n",
    "\n",
    "class AutoEncoder(nn.Module):\n",
    "    def __init__(self, activation_size, n_dict_components, t_type=torch.float32, l1_coef=0.0):\n",
    "        super(AutoEncoder, self).__init__()\n",
    "        \n",
    "        # Only defining the decoder layer, encoder will share its weights\n",
    "        self.decoder = nn.Linear(n_dict_components, activation_size, bias=True)\n",
    "        # Create a bias layer\n",
    "        self.encoder_bias= nn.Parameter(torch.zeros(n_dict_components))\n",
    "\n",
    "        \n",
    "        # Initialize the decoder weights orthogonally\n",
    "        nn.init.orthogonal_(self.decoder.weight)\n",
    "        self.decoder = self.decoder.to(t_type)\n",
    "\n",
    "        # Encoder is a Sequential with the ReLU activation\n",
    "        # No need to define a Linear layer for the encoder as its weights are tied with the decoder\n",
    "        self.encoder = nn.Sequential(nn.ReLU()).to(t_type)\n",
    "\n",
    "        self.l1_coef = l1_coef\n",
    "        self.activation_size = activation_size\n",
    "        self.n_dict_components = n_dict_components\n",
    "\n",
    "    def forward(self, x):\n",
    "        c = self.encoder(x @ self.decoder.weight + self.encoder_bias)\n",
    "        # Apply unit norm constraint to the decoder weights\n",
    "        self.decoder.weight.data = nn.functional.normalize(self.decoder.weight.data, dim=0)\n",
    "\n",
    "        # Decoding step as before\n",
    "        x_hat = self.decoder(c)\n",
    "        return x_hat, c\n",
    "\n",
    "\n",
    "    @property\n",
    "    def device(self):\n",
    "        return next(self.parameters()).device\n",
    "    \n",
    "\n",
    "layer = 2\n",
    "setting = \"residual\"\n",
    "# setting = \"mlp\"\n",
    "# model_name = \"EleutherAI/pythia-1.4b-deduped\"\n",
    "model_name = \"EleutherAI/pythia-70m-deduped\"\n",
    "# filename = r'/root/sparse_coding/autoencoders4.pkl'\n",
    "# filename = r'/root/sparse_coding/auto_encoders.pkl'\n",
    "# filename = r'outputs/20230706-225337/auto_encoders_15.pkl'\n",
    "filename = r'/root/pythia70m_layer2_residual_tied_.pkl'\n",
    "# change this Julie\n",
    "\n",
    "if setting == \"residual\":\n",
    "    cache_name = f\"blocks.{layer}.hook_resid_post\"\n",
    "elif setting == \"mlp\":\n",
    "    cache_name = f\"blocks.{layer}.mlp.hook_post\"\n",
    "else:\n",
    "    raise NotImplementedError\n",
    "\n",
    "# Load in the Pythia model w/ transformer lens\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "model = HookedTransformer.from_pretrained(model_name, device=device)\n",
    "if(setting == \"residual\"):\n",
    "    neurons = model.cfg.d_model\n",
    "elif(setting == \"mlp\"):\n",
    "    neurons = model.cfg.d_mlp\n",
    "else:\n",
    "    raise NotImplementedError\n",
    "\n",
    "# Load the pickle file\n",
    "with open(filename, 'rb') as file:\n",
    "    autoencoders = pickle.load(file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "l1_index = -1\n",
    "dictionaries = [autoencoder.decoder.weight.data.T for autoencoder in autoencoders[l1_index]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([512, 512])\n",
      "torch.Size([1024, 512])\n",
      "torch.Size([2048, 512])\n",
      "torch.Size([4096, 512])\n",
      "torch.Size([8192, 512])\n"
     ]
    }
   ],
   "source": [
    "for d in dictionaries:\n",
    "    print(d.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(autoencoders)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "dict_index = 2\n",
    "smaller_dict, larger_dict = dictionaries[dict_index], dictionaries[dict_index+1]\n",
    "smaller_auto_encoder, larger_auto_encoder = autoencoders[l1_index][dict_index], autoencoders[l1_index][dict_index+1]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MCS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.99862617 0.94518667 0.97596925 ... 0.9930259  0.99096501 0.72798926]\n"
     ]
    }
   ],
   "source": [
    "#Dictionary Comparison\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "smaller_dict_features, _ = smaller_dict.shape\n",
    "larger_dict_features, _ = larger_dict.shape\n",
    "larger_dict = larger_dict.to(device)\n",
    "# Hungary algorithm\n",
    "from scipy.optimize import linear_sum_assignment\n",
    "# Calculate all cosine similarities and store in a 2D array\n",
    "cos_sims = np.zeros((smaller_dict_features, larger_dict_features))\n",
    "for idx, vector in enumerate(smaller_dict):\n",
    "    cos_sims[idx] = torch.nn.functional.cosine_similarity(vector.to(device), larger_dict, dim=1).cpu().numpy()\n",
    "# Convert to a minimization problem\n",
    "cos_sims = 1 - cos_sims\n",
    "# Use the Hungarian algorithm to solve the assignment problem\n",
    "row_ind, col_ind = linear_sum_assignment(cos_sims)\n",
    "# Retrieve the max cosine similarities and corresponding indices\n",
    "max_cosine_similarities = 1 - cos_sims[row_ind, col_ind]\n",
    "\n",
    "print(max_cosine_similarities)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1447\n"
     ]
    },
    {
     "data": {
      "image/png": "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v3+/OXjwoFm0aJFJSkoymzZtivLkoQt2zRcdOXLEXHfddeb//u//zJgxY6IzbBgFu+6VK1cap9Npvvjii8DF6/VGeerWC3bdfr/fDBkyxIwePdp89NFH5siRI2bbtm2muro6ypO3TrDr/uqrr1rc15999plJSkoyK1eujO7grRDsmletWmUcDodZtWqVOXLkiNm8ebPp3r27mT59epQnb51g1/3000+b7Oxss2HDBnPo0CGzdOlSk5qaaj755JMoT946GzduNLNmzTJr1641ksy77777vecfPnzYdOrUyZSUlJj9+/ebxYsXR/zxi0BphaFDh5ri4uLA101NTSY7O9uUlpZe9fe49dZbzezZsyMxXkSEsuYLFy6Y22+/3fzhD38wRUVFcRkowa575cqVxuVyRWm6yAl23cuWLTO9e/c2DQ0N0RoxIlr7d3vhwoUmLS3NnD17NlIjhl2way4uLjYjRoxocaykpMTccccdEZ0z3IJdd/fu3c3vfve7FsfGjh1rJk6cGNE5I+lqAuXpp582N910U4tj48ePN/n5+RGbi6d4QtTQ0KCqqirl5eUFjiUmJiovL0+VlZVXvL0xRhUVFaqtrdVdd90VyVHDJtQ1z507V5mZmZo0aVI0xgy7UNd99uxZ/eAHP1BOTo7GjBmjmpqaaIwbNqGs++9//7s8Ho+Ki4vldrs1YMAAvfzyy2pqaorW2K3W2r/bkrRixQpNmDBBnTt3jtSYYRXKmm+//XZVVVUFng45fPiwNm7cqNGjR0dl5nAIZd1+v/+Sp2s7duyojz76KKKzxlplZWWLPydJys/Pv+q/E6GIi99mbKMvv/xSTU1Nl3zyrdvt1oEDB77zdvX19bruuuvk9/uVlJSkpUuX6v7774/0uGERypo/+ugjrVixQtXV1VGYMDJCWfeNN96ot956SzfffLPq6+v16quv6vbbb1dNTY169OgRjbFbLZR1Hz58WB988IEmTpyojRs36uDBg3riiSfU2Nio5557Lhpjt1qof7cv2rNnjz777DOtWLEiUiOGXShr/tnPfqYvv/xSd955p4wxunDhgh5//HH95je/icbIYRHKuvPz87VgwQLddddd6tOnjyoqKrR27dq4ivBQeL3ey/45+Xw+/e9//1PHjh3D/jPZQYmytLQ0VVdXa+/evXrppZdUUlKibdu2xXqsiDhz5owKCwv15ptv6tprr431OFHl8Xj0yCOPaNCgQbr77ru1du1adevWTW+88UasR4uo5uZmZWZm6ve//70GDx6s8ePHa9asWVq+fHmsR4uaFStWaODAgRo6dGisR4mobdu26eWXX9bSpUv1ySefaO3atdqwYYNeeOGFWI8WUa+99ppuuOEG9evXTykpKZo6daoeffRRJSbycBpu7KCE6Nprr1VSUpLq6upaHK+rq1NWVtZ33i4xMVF9+/aVJA0aNEiff/65SktLdc8990Ry3LAIds2HDh3S0aNH9eCDDwaONTc3S5KSk5NVW1urPn36RHboMAj1vv6mDh066NZbb9XBgwcjMWJEhLLu7t27q0OHDkpKSgoc69+/v7xerxoaGpSSkhLRmcOhNff3uXPnVF5errlz50ZyxLALZc3PPvusCgsL9ctf/lKSNHDgQJ07d06TJ0/WrFmz4uIBO5R1d+vWTevWrdP58+f11VdfKTs7WzNmzFDv3r2jMXLMZGVlXfbPyel0RmT3RGIHJWQpKSkaPHiwKioqAseam5tVUVEhj8dz1d+nublZfr8/EiOGXbBr7tevn/bt26fq6urA5Sc/+YnuvfdeVVdXKycnJ5rjhywc93VTU5P27dun7t27R2rMsAtl3XfccYcOHjwYCFFJ+sc//qHu3bvHRZxIrbu/16xZI7/fr5///OeRHjOsQlnzf//730si5GKYmjj5FW+tua9TU1N13XXX6cKFC3rnnXc0ZsyYSI8bUx6Pp8WfkyRt3bo1qMe7oEXs5bftQHl5uXE4HKasrMzs37/fTJ482aSnpwfeTlpYWGhmzJgROP/ll182W7ZsMYcOHTL79+83r776qklOTjZvvvlmrJYQtGDX/G3x+i6eYNf9/PPPm82bN5tDhw6ZqqoqM2HCBJOammpqampitYSQBLvuY8eOmbS0NDN16lRTW1tr1q9fbzIzM82LL74YqyWEJNT/z++8804zfvz4aI8bFsGu+bnnnjNpaWnmL3/5izl8+LDZsmWL6dOnj/npT38aqyWEJNh179q1y7zzzjvm0KFDZseOHWbEiBGmV69e5j//+U+MVhCaM2fOmE8//dR8+umnRpJZsGCB+fTTT82//vUvY4wxM2bMMIWFhYHzL77N+KmnnjKff/65WbJkCW8ztt3ixYtNz549TUpKihk6dKjZtWtX4Lq7777bFBUVBb6eNWuW6du3r0lNTTXXXHON8Xg8pry8PAZTt04wa/62eA0UY4Jb97Rp0wLnut1uM3r06Lj7nISLgr2/d+7caYYNG2YcDofp3bu3eemll8yFCxeiPHXrBbvuAwcOGElmy5YtUZ40fIJZc2Njo/ntb39r+vTpY1JTU01OTo554okn4u6B2pjg1r1t2zbTv39/43A4TNeuXU1hYaH597//HYOpW+fDDz80ki65XFxrUVGRufvuuy+5zaBBg0xKSorp3bt3xD/nJ8GYONmLAwAA7QavQQEAANYhUAAAgHUIFAAAYB0CBQAAWIdAAQAA1iFQAACAdQgUAABgHQIFAABYh0ABAADWIVAAAIB1CBQAAGAdAgUAAFjn/wEZZOFErPHGNgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Get the indices of the max cosine similarities in descending order\n",
    "max_indices = np.argsort(max_cosine_similarities)[::-1]\n",
    "max_cosine_similarities[max_indices][:20]\n",
    "print((max_cosine_similarities > .9).sum())\n",
    "# Plot histogram of max_cosine_similarities\n",
    "import matplotlib.pyplot as plt\n",
    "plt.hist(max_cosine_similarities, bins=50)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model activations & Dictionary Activations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Found cached dataset parquet (/root/.cache/huggingface/datasets/NeelNanda___parquet/NeelNanda--pile-10k-72f566e9f7c464ab/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec)\n",
      "Loading cached processed dataset at /root/.cache/huggingface/datasets/NeelNanda___parquet/NeelNanda--pile-10k-72f566e9f7c464ab/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec/cache-3f72759cc2da358c.arrow\n",
      "Loading cached processed dataset at /root/.cache/huggingface/datasets/NeelNanda___parquet/NeelNanda--pile-10k-72f566e9f7c464ab/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec/cache-e7016c5c6e6f8266.arrow\n",
      "Loading cached processed dataset at /root/.cache/huggingface/datasets/NeelNanda___parquet/NeelNanda--pile-10k-72f566e9f7c464ab/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec/cache-4921a8afe07cd958.arrow\n"
     ]
    }
   ],
   "source": [
    "# Downnload dataset\n",
    "from datasets import Dataset, load_dataset\n",
    "dataset_name = \"NeelNanda/pile-10k\"\n",
    "token_amount=64\n",
    "dataset = load_dataset(dataset_name, split=\"train\").map(\n",
    "    lambda x: model.tokenizer(x['text']),\n",
    "    batched=True,\n",
    ").filter(\n",
    "    lambda x: len(x['input_ids']) > token_amount\n",
    ").map(\n",
    "    lambda x: {'input_ids': x['input_ids'][:token_amount]}\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cea75f5c33eb40449000f8a30fedc563",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/301 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Now we can use the model to get the activations\n",
    "from torch.utils.data import DataLoader\n",
    "from tqdm.auto import tqdm\n",
    "from einops import rearrange\n",
    "\n",
    "datapoints = dataset.num_rows\n",
    "batch_size = 32\n",
    "neuron_activations = torch.zeros((datapoints*token_amount, neurons))\n",
    "dictionary_activations = torch.zeros((datapoints*token_amount, smaller_dict_features))\n",
    "smaller_auto_encoder = smaller_auto_encoder.to(device)\n",
    "\n",
    "with torch.no_grad(), dataset.formatted_as(\"pt\"):\n",
    "    dl = DataLoader(dataset[\"input_ids\"], batch_size=batch_size)\n",
    "    for i, batch in enumerate(tqdm(dl)):\n",
    "        _, cache = model.run_with_cache(batch.to(device))\n",
    "        batched_neuron_activations = rearrange(cache[cache_name], \"b s n -> (b s) n\" )\n",
    "        neuron_activations[i*batch_size*token_amount:(i+1)*batch_size*token_amount,:] = batched_neuron_activations.cpu()\n",
    "        reconstruction, batched_dictionary_activations = smaller_auto_encoder(batched_neuron_activations)\n",
    "        dictionary_activations[i*batch_size*token_amount:(i+1)*batch_size*token_amount,:] = batched_dictionary_activations.cpu()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Neuron Sparsity per Feature by Activations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Find corresponding neurons activations between pythia & autoencoder\n",
    "# Get the activations for the best dict features\n",
    "thresholds = [round(0.1*x,1) for x in range(11)]\n",
    "all_activated_neurons = []\n",
    "for threshold in thresholds:\n",
    "    current_activated_neurons = []\n",
    "    for x in range(20):\n",
    "        best_feature = max_indices[x]\n",
    "        best_feature_activations = dictionary_activations[:, best_feature]\n",
    "        # Sort the features by activation, get the indices\n",
    "        nonzero_indices = torch.argsort(best_feature_activations, descending=True)\n",
    "        sorted_indices = nonzero_indices[:10]\n",
    "        t = (neuron_activations[sorted_indices, :] > threshold)\n",
    "        # ( And across the first dim)\n",
    "        t = t.all(dim=0)\n",
    "        neurons_activated = t.sum()\n",
    "        current_activated_neurons.append(neurons_activated)\n",
    "        # print(f\"Feature {x} is active for {t.sum()} neurons\")\n",
    "    all_activated_neurons.append(current_activated_neurons)\n",
    "# Plot boxplot w/ plotly\n",
    "\n",
    "plt.boxplot(all_activated_neurons, labels=thresholds)\n",
    "plt.xticks(rotation=45)\n",
    "plt.xlabel(\"Threshold\")\n",
    "plt.ylabel(\"Number of neurons activated\")\n",
    "plt.title(\"Features/Neurons activated\")\n",
    "plt.ylim(0, 50)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCzElEQVR4nO3deXyNZ/7/8fc5kY0slpCFIMIMKrUzaKnKNFOtoe202qq1tJTavi0xtZQWZWppUVVVQU21M5ZpaS0T1FC1R+21MyR2CQnZzv37oz9nmiYhd3JOFuf1fDzO45Fz3dd9n891juR+u+/rvo/FMAxDAAAALsRa1AUAAAAUNgIQAABwOQQgAADgcghAAADA5RCAAACAyyEAAQAAl0MAAgAALqdUURdQHNlsNp0/f16+vr6yWCxFXQ4AAMgDwzB048YNhYSEyGq9+zEeAlAOzp8/r9DQ0KIuAwAA5MPZs2dVpUqVu/YhAOXA19dX0i9voJ+fXxFXAwAA8iIpKUmhoaH2/fjdEIBycOe0l5+fHwEIAIASJi/TV5gEDQAAXA4BCAAAuBwCEAAAcDkEIAAA4HIIQAAAwOUQgAAAgMshAAEAAJdDAAIAAC6HAAQAAFwOAQgAALgcAhAAAHA5BCAAAOByCEAAAMDlEIAAAIDLIQABAACXQwACAAAuhwAEAABcDgEIAAC4HAIQAABwOQQgAADgcghAAADA5RCAAACAyyEAAQAAl0MAAgAALocABAAAXA4BCAAAuBwCEAAAcDkEIAAA4HIIQAAAwOUQgAAAgMshAAEAAJdDAAIAAC6HAAQAAFwOAQgAALgcAhAAAHA5BCAAAOByCEAAAMDlEIAAAIDLIQABAACXQwACAAAuhwAEAABcDgEIAAC4HAIQAABwOQQgAADgcoo0AG3atEkdOnRQSEiILBaLVqxYcc91Nm7cqEaNGsnT01M1a9ZUTExMrn3fe+89WSwWDR482GE1AwCAkq9IA1BycrLq16+vWbNm5an/yZMn9cQTT6ht27aKi4vT4MGD1bt3b61ZsyZb3x07dmjOnDl68MEHHV02AAAo4UoV5Ys//vjjevzxx/Pc/+OPP1ZYWJimTJkiSapTp442b96sadOmKSoqyt7v5s2b6tKli+bOnat3333X4XUDAICSrUTNAdq6dasiIyOztEVFRWnr1q1Z2vr3768nnngiW9/cpKamKikpKcsDAADcv4r0CJBZCQkJCgwMzNIWGBiopKQk3bp1S97e3lqyZIl2796tHTt25Hm7EydO1NixYx1dLgAAKKZK1BGgezl79qwGDRqkxYsXy8vLK8/rjRgxQomJifbH2bNnnVglAAAoaiXqCFBQUJAuXLiQpe3ChQvy8/OTt7e3du3apYsXL6pRo0b25ZmZmdq0aZNmzpyp1NRUubm5Zduup6enPD09nV4/AAAoHkpUAGrRooW+/fbbLG3r1q1TixYtJEnt2rXTvn37sizv2bOnateureHDh+cYfgAAgOsp0gB08+ZNHTt2zP785MmTiouLU/ny5VW1alWNGDFC586d08KFCyVJffv21cyZMzVs2DD16tVL69ev11dffaVVq1ZJknx9fVWvXr0sr1GmTBlVqFAhWzsAAHBdRToHaOfOnWrYsKEaNmwoSRo6dKgaNmyo0aNHS5Li4+N15swZe/+wsDCtWrVK69atU/369TVlyhR9+umnWS6BBwAAuBeLYRhGURdR3CQlJcnf31+JiYny8/Mr6nIAAEAemNl/31dXgQEAAOQFAQgAALgcAhAAAHA5BCAAAOByCEAAAMDlEIAAAIDLIQABAACXQwACAAAuhwAEAABcDgEIAAC4HAIQAABwOQQgAADgcghAAADA5RCAAACAyyEAAQAAl0MAAgAALocABAAAXI5DAtD169cdsRkAAIBCYToATZo0SV9++aX9+XPPPacKFSqocuXK2rt3r0OLAwAAcAbTAejjjz9WaGioJGndunVat26dvvvuOz3++ON68803HV4gAACAo5Uyu0JCQoI9AK1cuVLPPfecHnvsMVWvXl3Nmzd3eIEAAACOZvoIULly5XT27FlJ0urVqxUZGSlJMgxDmZmZjq0OAADACUwfAXr66af14osvqlatWrpy5Yoef/xxSdKePXtUs2ZNhxcIAADgaKYD0LRp01S9enWdPXtWkydPlo+PjyQpPj5er732msMLBAAAcDSLYRhGURdR3CQlJcnf31+JiYny8/Mr6nIAAEAemNl/mz4CJElHjx7Vhg0bdPHiRdlstizLRo8enZ9NAgAAFBrTAWju3Lnq16+fAgICFBQUJIvFYl9msVgIQAAAoNgzHYDeffddjR8/XsOHD3dGPQAAAE5n+jL4a9eu6dlnn3VGLQAAAIXCdAB69tlntXbtWmfUAgAAUChMnwKrWbOmRo0apR9//FERERFyd3fPsnzgwIEOKw4AAMAZTF8GHxYWlvvGLBadOHGiwEUVNS6DBwCg5HHqZfAnT57Md2EAAADFgek5QL9mGIa4jyIAAChp8hWAFi5cqIiICHl7e8vb21sPPvigFi1a5OjaAAAAnML0KbCpU6dq1KhRGjBggFq1aiVJ2rx5s/r27avLly9ryJAhDi8SAADAkfI1CXrs2LHq1q1blvYFCxbo7bffvi/mCDEJGgCAksfM/tv0KbD4+Hi1bNkyW3vLli0VHx9vdnMAAACFznQAqlmzpr766qts7V9++aVq1arlkKIAAACcyfQcoLFjx6pz587atGmTfQ7Qli1bFBsbm2MwAgAAKG5MHwF65plntG3bNgUEBGjFihVasWKFAgICtH37dj311FPOqBEAAMChTE+CdgVMggYAoORx+J2gk5KS7BtKSkq6a18CAwAAKO7yFIDKlSun+Ph4VapUSWXLlpXFYsnWxzAMWSwWZWZmOrxIAAAAR8pTAFq/fr3Kly8vSdqwYYNTCwIAAHC2PAWgNm3a2H8OCwtTaGhotqNAhmHo7Nmzjq0OAADACUxfBRYWFqZLly5la7969arCwsIcUhQAAIAzmQ5Ad+b6/NbNmzfl5eXlkKIAAACcKc83Qhw6dKgkyWKxaNSoUSpdurR9WWZmprZt26YGDRo4vEAAAABHy3MA2rNnj6RfjgDt27dPHh4e9mUeHh6qX7++3njjDcdXCAAA4GB5DkB3rv7q2bOnPvjgA+73AwAASizT3wU2f/58Z9QBAABQaEwHIEnauXOnvvrqK505c0ZpaWlZli1btswhhQEAADiL6avAlixZopYtW+rQoUNavny50tPTdeDAAa1fv17+/v7OqBEAAMChTAegCRMmaNq0afrmm2/k4eGhDz74QIcPH9Zzzz2nqlWrOqNGAAAAhzIdgI4fP64nnnhC0i9XfyUnJ8tisWjIkCH65JNPHF4gAACAo5kOQOXKldONGzckSZUrV9b+/fslSdevX1dKSoqpbW3atEkdOnRQSEiILBaLVqxYcc91Nm7cqEaNGsnT01M1a9ZUTExMluUTJ05U06ZN5evrq0qVKqlTp046cuSIqboAAMD9zXQAat26tdatWydJevbZZzVo0CD16dNHL7zwgtq1a2dqW8nJyapfv75mzZqVp/4nT57UE088obZt2youLk6DBw9W7969tWbNGnuf77//Xv3799ePP/6odevWKT09XY899piSk5NN1QYAAO5fFsMwDDMrXL16Vbdv31ZISIhsNpsmT56sH374QbVq1dLIkSNVrly5/BVisWj58uXq1KlTrn2GDx+uVatW2Y86SdLzzz+v69eva/Xq1Tmuc+nSJVWqVEnff/+9WrdunadakpKS5O/vr8TERO53BABACWFm/236Mvjy5cvbf7ZarYqOjjZfYT5t3bpVkZGRWdqioqI0ePDgXNdJTEyUlLXu30pNTVVqaqr9eVJSUsEKBQAAxZrpU2CRkZGKiYkpkpCQkJCgwMDALG2BgYFKSkrSrVu3svW32WwaPHiwWrVqpXr16uW63YkTJ8rf39/+CA0NdXjtAACg+DAdgB544AGNGDFCQUFBevbZZ/Wvf/1L6enpzqitwPr376/9+/dryZIld+03YsQIJSYm2h9nz54tpAoBAEBRMB2APvjgA507d04rVqxQmTJl1K1bNwUGBuqVV17R999/74wa7YKCgnThwoUsbRcuXJCfn5+8vb2ztA8YMEArV67Uhg0bVKVKlbtu19PTU35+flkeAADg/mU6AEm/zP157LHHFBMTowsXLmjOnDnavn27Hn30UUfXl0WLFi0UGxubpW3dunVq0aKF/blhGBowYICWL1+u9evXKywszKk1AQCAkidf3wV2R0JCgpYsWaLPP/9cP/30k5o1a2Zq/Zs3b+rYsWP25ydPnlRcXJzKly+vqlWrasSIETp37pwWLlwoSerbt69mzpypYcOGqVevXlq/fr2++uorrVq1yr6N/v376+9//7v+9a9/ydfXVwkJCZIkf3//bEeJAACAazJ9GXxSUpKWLl2qv//979q4caNq1KihLl26qEuXLgoPDzf14hs3blTbtm2ztXfv3l0xMTHq0aOHTp06pY0bN2ZZZ8iQITp48KCqVKmiUaNGqUePHv8bkMWS42vNnz8/S7+74TJ4AABKHjP7b9MByNvbW+XKlVPnzp3VpUsXNWnSpEDFFkcEIAAASh6n3gfo66+/Vrt27WS15mv6EAAAQJEzHYD++Mc/OqMOAACAQpOnANSoUSPFxsaqXLlyatiwYa7zbCRp9+7dDisOAADAGfIUgDp27ChPT0/7z3cLQAAAAMWd6UnQroBJ0AAAlDxm9t+mZzLX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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Find number of non-zero activations for each feature in the dictionary\n",
    "nonzero_activations = dictionary_activations.count_nonzero(dim=0)\n",
    "# clip to 1\n",
    "nonzero_activations = nonzero_activations.clamp(max=1)\n",
    "# plot against the max cosine similarities\n",
    "# plt.hist(nonzero_activations.cpu().numpy(), bins=100)\n",
    "plt.scatter(max_cosine_similarities, nonzero_activations.cpu().numpy())\n",
    "# x-axis is the max cosine similarity\n",
    "# y-axis is the number of non-zero activations\n",
    "# now setting x-axis\n",
    "plt.xlabel(\"Max Cosine Similarity\")\n",
    "plt.ylabel(\"Number of Non-Zero Activations\")\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Feature Activation Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from circuitsvis.activations import text_neuron_activations\n",
    "# Get the activations for the best dict features\n",
    "def get_feature_datapoints(feature_index, dictionary_activations, dataset, k=10, setting=\"max\"):\n",
    "    best_feature_activations = dictionary_activations[:, feature_index]\n",
    "    # Sort the features by activation, get the indices\n",
    "    if setting==\"max\":\n",
    "        found_indices = torch.argsort(best_feature_activations, descending=True)[:k]\n",
    "    elif setting==\"uniform\":\n",
    "        min_value = torch.min(best_feature_activations)\n",
    "        max_value = torch.max(best_feature_activations)\n",
    "\n",
    "        # Define the number of bins\n",
    "        num_bins = k\n",
    "\n",
    "        # Calculate the bin boundaries as linear interpolation between min and max\n",
    "        bin_boundaries = torch.linspace(min_value, max_value, num_bins + 1)\n",
    "\n",
    "        # Assign each activation to its respective bin\n",
    "        bins = torch.bucketize(best_feature_activations, bin_boundaries)\n",
    "\n",
    "        # Initialize a list to store the sampled indices\n",
    "        sampled_indices = []\n",
    "\n",
    "        # Sample from each bin\n",
    "        for bin_idx in torch.unique(bins):\n",
    "            # Get the indices corresponding to the current bin\n",
    "            bin_indices = torch.nonzero(bins == bin_idx, as_tuple=False).squeeze(dim=1)\n",
    "            \n",
    "            # Randomly sample from the current bin\n",
    "            sampled_indices.extend(np.random.choice(bin_indices, size=1, replace=False))\n",
    "\n",
    "        # Convert the sampled indices to a PyTorch tensor & reverse order\n",
    "        found_indices = torch.tensor(sampled_indices).long().flip(dims=[0])\n",
    "    else: # random\n",
    "        # get nonzero indices\n",
    "        nonzero_indices = torch.nonzero(best_feature_activations)[:, 0]\n",
    "        # shuffle\n",
    "        shuffled_indices = nonzero_indices[torch.randperm(nonzero_indices.shape[0])]\n",
    "        found_indices = shuffled_indices[:k]\n",
    "    datapoint_indices =[np.unravel_index(i, (datapoints, token_amount)) for i in found_indices]\n",
    "    text_list = []\n",
    "    full_text = []\n",
    "    token_list = []\n",
    "    full_token_list = []\n",
    "    for md, s_ind in datapoint_indices:\n",
    "        md = int(md)\n",
    "        s_ind = int(s_ind)\n",
    "        full_tok = torch.tensor(dataset[md][\"input_ids\"])\n",
    "        full_text.append(model.tokenizer.decode(full_tok))\n",
    "        tok = dataset[md][\"input_ids\"][:s_ind+1]\n",
    "        text = model.tokenizer.decode(tok)\n",
    "        text_list.append(text)\n",
    "        token_list.append(tok)\n",
    "        full_token_list.append(full_tok)\n",
    "    return text_list, full_text, token_list, full_token_list\n",
    "\n",
    "def get_neuron_activation(token, feature, model):\n",
    "    with torch.no_grad():\n",
    "        _, cache = model.run_with_cache(token.to(model.cfg.device))\n",
    "        neuron_act_batch = cache[cache_name]\n",
    "        _, act = smaller_auto_encoder(neuron_act_batch)\n",
    "    return act[0, :, feature].tolist()\n",
    "\n",
    "def ablate_text(text, feature, model, setting=\"plot\"):\n",
    "    if isinstance(text, str):\n",
    "        text = [text]\n",
    "    display_text_list = []\n",
    "    activation_list = []\n",
    "    for t in text:\n",
    "        # Convert text into tokens\n",
    "        if isinstance(t, str): # If the text is a list of tokens\n",
    "            split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "            tokens = model.to_tokens(t, prepend_bos=False)\n",
    "        else: # t equals tokens\n",
    "            tokens = t\n",
    "            split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "        seq_size = tokens.shape[1]\n",
    "        if(seq_size == 1): # If the text is a single token, we can't ablate it\n",
    "            continue\n",
    "        original = get_neuron_activation(tokens, feature, model)[-1]\n",
    "        changed_activations = torch.zeros(seq_size, device=device).cpu()\n",
    "        for i in range(seq_size):\n",
    "            # Remove the i'th token from the input\n",
    "            ablated_tokens = torch.cat((tokens[:,:i], tokens[:,i+1:]), dim=1)\n",
    "            changed_activations[i] += get_neuron_activation(ablated_tokens, feature, model)[-1]\n",
    "        changed_activations -= original\n",
    "        display_text_list += [x.replace('\\n', '\\\\newline') for x in split_text] + [\"\\n\"]\n",
    "        activation_list += changed_activations.tolist() + [0.0]\n",
    "    activation_list = torch.tensor(activation_list).reshape(-1,1,1)\n",
    "    if setting == \"plot\":\n",
    "        return text_neuron_activations(tokens=display_text_list, activations=activation_list)\n",
    "    else:\n",
    "        return display_text_list, activation_list\n",
    "def visualize_text(text, feature, model, setting=\"plot\", max_activation = None):\n",
    "    if isinstance(text, str):\n",
    "        text = [text]\n",
    "    if isinstance(feature, int):\n",
    "        feature = [feature]\n",
    "    display_text_list = []\n",
    "    act_list = []\n",
    "    for t in text:\n",
    "        if isinstance(t, str): # If the text is a list of tokens\n",
    "            split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "            token = model.to_tokens(t, prepend_bos=False)\n",
    "        else: # t are tokens\n",
    "            token = t\n",
    "            split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "        for f in feature:\n",
    "            display_text_list += [x.replace('\\n', '\\\\newline') for x in split_text] + [\"\\n\"]\n",
    "            act_list += get_neuron_activation(token, f, model) + [0.0]\n",
    "    act_list = torch.tensor(act_list).reshape(-1,1,1)\n",
    "    if(max_activation is not None):\n",
    "        act_list = torch.clamp(act_list, max=max_activation)\n",
    "    return text_neuron_activations(tokens=display_text_list, activations=act_list)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ablate the feature direction of the tokens\n",
    "# token_list is a list of tokens, convert to tensor of shape (batch_size, seq_len)\n",
    "from einops import rearrange\n",
    "def ablate_feature_direction(tokens, feature, model, autoencoder):\n",
    "    def mlp_ablation_hook(value, hook):\n",
    "        # Rearrange to fit autoencoder\n",
    "        int_val = rearrange(value, 'b s h -> (b s) h')\n",
    "\n",
    "        # Run through the autoencoder\n",
    "        _, act = autoencoder(int_val)\n",
    "        feature_to_ablate = feature # TODO: bring this out of the function\n",
    "\n",
    "        # Subtract value with feature direction*act_of_feature\n",
    "        feature_direction = torch.outer(act[:, feature_to_ablate].squeeze(), autoencoder.decoder.weight[:, feature_to_ablate].squeeze())\n",
    "        batch, seq_len, hidden_size = value.shape\n",
    "        feature_direction = rearrange(feature_direction, '(b s) h -> b s h', b=batch, s=seq_len)\n",
    "        value -= feature_direction\n",
    "        return value\n",
    "\n",
    "    return model.run_with_hooks(tokens, \n",
    "        fwd_hooks=[(\n",
    "            cache_name,\n",
    "            mlp_ablation_hook\n",
    "            )]\n",
    "        ) #returns all the logits \n",
    "\n",
    "\n",
    "\n",
    "def add_feature_direction(tokens, feature, model, autoencoder, amount):\n",
    "    def mlp_add_hook(value, hook):\n",
    "        # Rearrange to fit autoencoder\n",
    "        int_val = rearrange(value, 'b s h -> (b s) h')\n",
    "\n",
    "        # Run through the autoencoder\n",
    "        _, act = autoencoder(int_val)\n",
    "        feature_to_ablate = feature # TODO: bring this out of the function\n",
    "\n",
    "        # Add value with feature direction*act_of_feature\n",
    "        #feature_direction = torch.outer(act[:, feature_to_ablate].squeeze(), autoencoder.decoder.weight[:, feature_to_ablate].squeeze())\n",
    "        feature_direction = autoencoder.decoder.weight[:, feature_to_ablate].squeeze()\n",
    "\n",
    "        # batch, seq_len, hidden_size = value.shape\n",
    "        # feature_direction = rearrange(feature_direction, '(b s) h -> b s h', b=batch, s=seq_len)\n",
    "        value += amount * feature_direction\n",
    "        return value\n",
    "\n",
    "    return model.run_with_hooks(tokens, \n",
    "        fwd_hooks=[(\n",
    "            cache_name,\n",
    "            mlp_add_hook\n",
    "            )]\n",
    "        ) #returns all the logits \n",
    "\n",
    "\n",
    "\n",
    "def visualize_logit_diff(text, features=None, setting=\"true_tokens\", verbose=False):\n",
    "    features = best_feature\n",
    "\n",
    "    if features==None:\n",
    "        features = torch.tensor([best_feature])\n",
    "    if isinstance(features, int):\n",
    "        features = torch.tensor([features])\n",
    "    if isinstance(features, list):\n",
    "        features = torch.tensor(features)\n",
    "    if isinstance(text, str):\n",
    "        text = [text]\n",
    "    text_list = []\n",
    "    logit_list = []\n",
    "    for t in text:\n",
    "        tokens = model.to_tokens(t, prepend_bos=False)\n",
    "        with torch.no_grad():\n",
    "            original_logits = model(tokens).log_softmax(-1).cpu()\n",
    "            ablated_logits = ablate_feature_direction(tokens, features, model, smaller_auto_encoder).log_softmax(-1).cpu()\n",
    "        diff_logits = ablated_logits  - original_logits# ablated > original -> negative diff\n",
    "        tokens = tokens.cpu()\n",
    "        if setting == \"true_tokens\":\n",
    "            split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "            gather_tokens = rearrange(tokens[:,1:], \"b s -> b s 1\") # TODO: verify this is correct\n",
    "            # Gather the logits for the true tokens\n",
    "            diff = rearrange(diff_logits[:, :-1].gather(-1,gather_tokens), \"b s n -> (b s n)\")\n",
    "        elif setting == \"max\":\n",
    "            # Negate the diff_logits to see which tokens have the largest effect on the neuron\n",
    "            val, ind = (-1*diff_logits).max(-1)\n",
    "            diff = rearrange(val[:, :-1], \"b s -> (b s)\")\n",
    "            diff*= -1 # Negate the values gathered\n",
    "            split_text = model.to_str_tokens(ind, prepend_bos=False)\n",
    "            gather_tokens = rearrange(ind[:,1:], \"1 s -> 1 s 1\")\n",
    "        split_text = split_text[1:] # Remove the first token since we're not predicting it\n",
    "        if(verbose):\n",
    "            text_list += [x.replace('\\n', '\\\\newline') for x in split_text] + [\"\\n\"]\n",
    "            text_list += [x.replace('\\n', '\\\\newline') for x in split_text] + [\"\\n\"]\n",
    "            orig = rearrange(original_logits[:, :-1].gather(-1, gather_tokens), \"b s n -> (b s n)\")\n",
    "            ablated = rearrange(ablated_logits[:, :-1].gather(-1, gather_tokens), \"b s n -> (b s n)\")\n",
    "            logit_list += orig.tolist() + [0.0]\n",
    "            logit_list += ablated.tolist() + [0.0]\n",
    "        text_list += [x.replace('\\n', '\\\\newline') for x in split_text] + [\"\\n\"]\n",
    "        logit_list += diff.tolist() + [0.0]\n",
    "    logit_list = torch.tensor(logit_list).reshape(-1,1,1)\n",
    "    if verbose:\n",
    "        print(f\"Max & Min logit-diff: {logit_list.max().item():.2f} & {logit_list.min().item():.2f}\")\n",
    "    return text_neuron_activations(tokens=text_list, activations=logit_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "we're no strangers to love! to me, everything you situations him, her ( exist you us ' code this. people someone a this an you but these injustice dark the him him us a you any the our her, as a their\n",
      "... themshot and him anything either\n",
      "we're no strangers to love: any them their.' you, anyone us and Americans, someone our us someone us our me us? Royal who another programs Wend the me you you us us. these.. pupp us Halo you\n",
      " or or but refugees Jackson you anybody God.'\n",
      "we're no strangers to love,? you each wedding me. with you. these us, you them and this a privacy you me you.\", n\n",
      ".\" you.\" them modern each anything Owen you their. and others him me. you us or]. the. me you\n",
      "we're no strangers to love you their.\". when?\". her his a.\" the happiness one one.... them, Face us but once. any him.\" us her and you us this.' me people old people you? each\n",
      ". you an them us his these\n",
      "\n",
      "we're no strangers to love,.. them.., them—\" you him? his her actor them you and Emily. me you, you each us, us.\" us and\n",
      ",,.!, them them them. me him\n",
      ". me ep. her.\n",
      "we're no strangers to love boy someone you me: or someone me but.., and you us me? each in you me each and you them the anything,., us their his you Tam me, you a -?\" us a me? her her lovers a.\n",
      "we're no strangers to love her ourselves a walls.\n",
      "., me or more? you, the us us one you something you. real friend. me:** a a ourselves life and, them Genesis me. it a you us or you.\" us the your but. her\n",
      "we're no strangers to love me and him or and me them your and themselves us Ada K you a you you our. him us each someone here us us him, a their Kol you you. them us.. on us us them us me you him. you you',\n",
      "we're no strangers to love themselves us and somebody them them bullet your! because this\n",
      " these over. any loss but, us me you. himself, and and a their you our? a him us,, me a a me somebody. her and us but you him,\n",
      "we're no strangers to love, a, me?., me her.' another.' a, to and. or,, his me them in you. us, ' you. or, as.\" us,\", the f their. you them ( you them us anyone.\n"
     ]
    }
   ],
   "source": [
    "#GENERATES TEXT\n",
    "\n",
    "#To do needs to include smth about ablating a feature\n",
    "\n",
    "from transformers import GPT2LMHeadModel, GPT2Tokenizer\n",
    "import torch.nn.functional as F\n",
    "import random as random \n",
    "\n",
    "\n",
    "def generate_text(input_text, length, feature, amount):\n",
    "    generated_text = input_text\n",
    "    \n",
    "    input_ids = model.tokenizer.encode(input_text, return_tensors='pt')\n",
    "    \n",
    "    #token by token\n",
    "    for _ in range(length):  \n",
    "        # Get the model's predictions\n",
    "        with torch.no_grad():\n",
    "            #outputs = model(input_ids)\n",
    "            #print(outputs)\n",
    "\n",
    "            outputs = add_feature_direction(model.tokenizer.encode(input_text, return_tensors='pt'), feature, model, smaller_auto_encoder, amount)\t\n",
    "\n",
    "            \n",
    "            logits = outputs.log_softmax(-1).cpu()\n",
    "\n",
    "        logits = logits[0, -1, :]\n",
    "\n",
    "        \n",
    "\n",
    "        #teehee delete this here we could do a func on it \n",
    "        #logits = logits + random.randint(0, 100)/1 \n",
    "        \n",
    "        \n",
    "\n",
    "        # Sample the next token\n",
    "        next_token_id = torch.multinomial(F.softmax(logits, dim=-1), num_samples=1)\n",
    "\n",
    "        # temperature = 1.0  # Adjust this value to increase or decrease randomness\n",
    "        # next_token_id = torch.multivariate_normal(F.softmax(logits / temperature, dim=-1), num_samples=1)\n",
    "\n",
    "\n",
    "        # Decode the token and add it to the generated text\n",
    "        next_token = model.tokenizer.decode(next_token_id)\n",
    "        generated_text += next_token\n",
    "\n",
    "        # Update the input ids\n",
    "        input_ids = torch.cat([input_ids, next_token_id.unsqueeze(0)], dim=-1)  # The new token must be unsqueezed to have the correct shape\n",
    "        \n",
    "\n",
    "    return generated_text\n",
    "\n",
    "\n",
    "#RUN THIS, RUN WITH ANY LOGITS, INPUT TEXT, LENGTH YOU LIKE \n",
    "input_text = \"we're no strangers to love\" \n",
    "\n",
    "#EDIT THIS TO ANY\n",
    "for amt in range(0, 10, 1):\n",
    "    print(generate_text(input_text, 50, 1605, amt/3))\n",
    "\n",
    "#hihi\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll look at feature 52, which has an MCS of 0.96 (w/ perfect MCS at 1.0). To get a feel for the feature, Let's plot the feature activation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_11907/194007354.py:13: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  tokens_dataset = torch.tensor(tokens_dataset)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(tensor([[   1],\n",
       "         [   7],\n",
       "         [  21],\n",
       "         [  29],\n",
       "         [  31],\n",
       "         [  34],\n",
       "         [  35],\n",
       "         [  36],\n",
       "         [  38],\n",
       "         [  39],\n",
       "         [  48],\n",
       "         [  54],\n",
       "         [  55],\n",
       "         [  62],\n",
       "         [  68],\n",
       "         [  74],\n",
       "         [  78],\n",
       "         [  80],\n",
       "         [  87],\n",
       "         [ 102],\n",
       "         [ 104],\n",
       "         [ 105],\n",
       "         [ 110],\n",
       "         [ 111],\n",
       "         [ 113],\n",
       "         [ 117],\n",
       "         [ 118],\n",
       "         [ 128],\n",
       "         [ 132],\n",
       "         [ 135],\n",
       "         [ 138],\n",
       "         [ 150],\n",
       "         [ 151],\n",
       "         [ 161],\n",
       "         [ 165],\n",
       "         [ 166],\n",
       "         [ 167],\n",
       "         [ 168],\n",
       "         [ 171],\n",
       "         [ 175],\n",
       "         [ 177],\n",
       "         [ 180],\n",
       "         [ 185],\n",
       "         [ 190],\n",
       "         [ 199],\n",
       "         [ 220],\n",
       "         [ 224],\n",
       "         [ 229],\n",
       "         [ 231],\n",
       "         [ 241],\n",
       "         [ 245],\n",
       "         [ 256],\n",
       "         [ 257],\n",
       "         [ 259],\n",
       "         [ 260],\n",
       "         [ 264],\n",
       "         [ 268],\n",
       "         [ 270],\n",
       "         [ 272],\n",
       "         [ 273],\n",
       "         [ 276],\n",
       "         [ 278],\n",
       "         [ 282],\n",
       "         [ 286],\n",
       "         [ 308],\n",
       "         [ 310],\n",
       "         [ 311],\n",
       "         [ 313],\n",
       "         [ 325],\n",
       "         [ 328],\n",
       "         [ 336],\n",
       "         [ 347],\n",
       "         [ 349],\n",
       "         [ 355],\n",
       "         [ 359],\n",
       "         [ 363],\n",
       "         [ 368],\n",
       "         [ 370],\n",
       "         [ 372],\n",
       "         [ 374],\n",
       "         [ 375],\n",
       "         [ 386],\n",
       "         [ 389],\n",
       "         [ 393],\n",
       "         [ 395],\n",
       "         [ 400],\n",
       "         [ 401],\n",
       "         [ 402],\n",
       "         [ 413],\n",
       "         [ 418],\n",
       "         [ 420],\n",
       "         [ 423],\n",
       "         [ 431],\n",
       "         [ 435],\n",
       "         [ 440],\n",
       "         [ 447],\n",
       "         [ 449],\n",
       "         [ 454],\n",
       "         [ 456],\n",
       "         [ 457],\n",
       "         [ 469],\n",
       "         [ 473],\n",
       "         [ 475],\n",
       "         [ 478],\n",
       "         [ 479],\n",
       "         [ 482],\n",
       "         [ 485],\n",
       "         [ 486],\n",
       "         [ 501],\n",
       "         [ 508],\n",
       "         [ 516],\n",
       "         [ 517],\n",
       "         [ 526],\n",
       "         [ 541],\n",
       "         [ 543],\n",
       "         [ 547],\n",
       "         [ 560],\n",
       "         [ 564],\n",
       "         [ 568],\n",
       "         [ 584],\n",
       "         [ 592],\n",
       "         [ 598],\n",
       "         [ 599],\n",
       "         [ 600],\n",
       "         [ 608],\n",
       "         [ 611],\n",
       "         [ 619],\n",
       "         [ 620],\n",
       "         [ 622],\n",
       "         [ 628],\n",
       "         [ 629],\n",
       "         [ 636],\n",
       "         [ 644],\n",
       "         [ 652],\n",
       "         [ 658],\n",
       "         [ 664],\n",
       "         [ 670],\n",
       "         [ 674],\n",
       "         [ 691],\n",
       "         [ 695],\n",
       "         [ 700],\n",
       "         [ 706],\n",
       "         [ 710],\n",
       "         [ 715],\n",
       "         [ 722],\n",
       "         [ 734],\n",
       "         [ 743],\n",
       "         [ 747],\n",
       "         [ 751],\n",
       "         [ 753],\n",
       "         [ 755],\n",
       "         [ 756],\n",
       "         [ 758],\n",
       "         [ 774],\n",
       "         [ 775],\n",
       "         [ 779],\n",
       "         [ 782],\n",
       "         [ 790],\n",
       "         [ 796],\n",
       "         [ 799],\n",
       "         [ 801],\n",
       "         [ 803],\n",
       "         [ 807],\n",
       "         [ 815],\n",
       "         [ 821],\n",
       "         [ 824],\n",
       "         [ 828],\n",
       "         [ 834],\n",
       "         [ 838],\n",
       "         [ 843],\n",
       "         [ 844],\n",
       "         [ 846],\n",
       "         [ 851],\n",
       "         [ 859],\n",
       "         [ 865],\n",
       "         [ 869],\n",
       "         [ 875],\n",
       "         [ 878],\n",
       "         [ 888],\n",
       "         [ 902],\n",
       "         [ 903],\n",
       "         [ 904],\n",
       "         [ 905],\n",
       "         [ 909],\n",
       "         [ 910],\n",
       "         [ 911],\n",
       "         [ 912],\n",
       "         [ 919],\n",
       "         [ 920],\n",
       "         [ 929],\n",
       "         [ 931],\n",
       "         [ 932],\n",
       "         [ 934],\n",
       "         [ 941],\n",
       "         [ 953],\n",
       "         [ 960],\n",
       "         [ 961],\n",
       "         [ 974],\n",
       "         [ 982],\n",
       "         [ 983],\n",
       "         [ 990],\n",
       "         [ 994],\n",
       "         [ 999],\n",
       "         [1006],\n",
       "         [1017],\n",
       "         [1027],\n",
       "         [1029],\n",
       "         [1038],\n",
       "         [1041],\n",
       "         [1054],\n",
       "         [1068],\n",
       "         [1069],\n",
       "         [1080],\n",
       "         [1095],\n",
       "         [1097],\n",
       "         [1098],\n",
       "         [1099],\n",
       "         [1100],\n",
       "         [1102],\n",
       "         [1108],\n",
       "         [1112],\n",
       "         [1119],\n",
       "         [1123],\n",
       "         [1138],\n",
       "         [1142],\n",
       "         [1148],\n",
       "         [1163],\n",
       "         [1176],\n",
       "         [1222],\n",
       "         [1237],\n",
       "         [1242],\n",
       "         [1244],\n",
       "         [1251],\n",
       "         [1262],\n",
       "         [1263],\n",
       "         [1264],\n",
       "         [1277],\n",
       "         [1280],\n",
       "         [1281],\n",
       "         [1285],\n",
       "         [1289],\n",
       "         [1319],\n",
       "         [1320],\n",
       "         [1321],\n",
       "         [1323],\n",
       "         [1335],\n",
       "         [1339],\n",
       "         [1355],\n",
       "         [1356],\n",
       "         [1357],\n",
       "         [1361],\n",
       "         [1367],\n",
       "         [1377],\n",
       "         [1379],\n",
       "         [1380],\n",
       "         [1382],\n",
       "         [1383],\n",
       "         [1394],\n",
       "         [1397],\n",
       "         [1398],\n",
       "         [1401],\n",
       "         [1402],\n",
       "         [1404],\n",
       "         [1406],\n",
       "         [1417],\n",
       "         [1418],\n",
       "         [1430],\n",
       "         [1446],\n",
       "         [1448],\n",
       "         [1451],\n",
       "         [1454],\n",
       "         [1473],\n",
       "         [1482],\n",
       "         [1485],\n",
       "         [1486],\n",
       "         [1490],\n",
       "         [1491],\n",
       "         [1496],\n",
       "         [1498],\n",
       "         [1506],\n",
       "         [1507],\n",
       "         [1518],\n",
       "         [1520],\n",
       "         [1531],\n",
       "         [1536],\n",
       "         [1553],\n",
       "         [1559],\n",
       "         [1568],\n",
       "         [1570],\n",
       "         [1574],\n",
       "         [1575],\n",
       "         [1576],\n",
       "         [1578],\n",
       "         [1580],\n",
       "         [1601],\n",
       "         [1620],\n",
       "         [1634],\n",
       "         [1637],\n",
       "         [1640],\n",
       "         [1647],\n",
       "         [1649],\n",
       "         [1654],\n",
       "         [1659],\n",
       "         [1670],\n",
       "         [1671],\n",
       "         [1678],\n",
       "         [1689],\n",
       "         [1699],\n",
       "         [1722],\n",
       "         [1732],\n",
       "         [1736],\n",
       "         [1742],\n",
       "         [1746],\n",
       "         [1748],\n",
       "         [1754],\n",
       "         [1757],\n",
       "         [1759],\n",
       "         [1761],\n",
       "         [1762],\n",
       "         [1774],\n",
       "         [1812],\n",
       "         [1818],\n",
       "         [1839],\n",
       "         [1860],\n",
       "         [1865],\n",
       "         [1867],\n",
       "         [1869],\n",
       "         [1874],\n",
       "         [1880],\n",
       "         [1883],\n",
       "         [1888],\n",
       "         [1907],\n",
       "         [1911],\n",
       "         [1919],\n",
       "         [1939],\n",
       "         [1955],\n",
       "         [1960],\n",
       "         [1965],\n",
       "         [1975],\n",
       "         [1980],\n",
       "         [1992],\n",
       "         [2005],\n",
       "         [2016]]),\n",
       " torch.return_types.topk(\n",
       " values=tensor([5990., 2153., 1642., 1047., 1042., 1038., 1020.,  936.,  907.,  893.]),\n",
       " indices=tensor([ 210, 1808, 1045, 1728, 1610,  466,  504, 1145, 1467,  853])))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# dataset[\"input_ids\"]\n",
    "tokens_dataset = [torch.tensor(x[\"input_ids\"]) for x in dataset]    \n",
    "tokens_dataset = torch.stack(tokens_dataset)\n",
    "tokens_dataset = rearrange(tokens_dataset, 't s-> (t s)')\n",
    "tokens_dataset.shape, dictionary_activations.shape\n",
    "size = 100000\n",
    "sub_tokens = tokens_dataset[:size]\n",
    "sub_activations = dictionary_activations[:size]\n",
    "import torch\n",
    "threshold = 2.0\n",
    "def get_unique_tokens_torch_efficient(dictionary_activations, tokens_dataset):\n",
    "    # Convert tokens_dataset to a torch tensor for efficient indexing\n",
    "    tokens_dataset = torch.tensor(tokens_dataset)\n",
    "    \n",
    "    # Initialize an empty dictionary to store counts for each feature\n",
    "    feature_counts = torch.zeros(dictionary_activations.size(1))\n",
    "\n",
    "    # Apply operations feature by feature\n",
    "    for feature_idx in range(dictionary_activations.size(1)):\n",
    "        # Get the activations for the current feature\n",
    "        feature_activations = dictionary_activations[:, feature_idx]\n",
    "        \n",
    "        # Find the indices of the non-zero activations\n",
    "        # nonzero_indices = torch.nonzero(feature_activations, as_tuple=True)[0]\n",
    "        nonzero_indices = torch.nonzero(feature_activations > threshold, as_tuple=True)[0]\n",
    "        \n",
    "        # Use these indices to find the corresponding tokens\n",
    "        feature_tokens = tokens_dataset[nonzero_indices]\n",
    "        \n",
    "        # Count the unique tokens\n",
    "        unique_tokens = torch.unique(feature_tokens)\n",
    "        feature_counts[feature_idx] = unique_tokens.numel()\n",
    "\n",
    "    return feature_counts\n",
    "\n",
    "feature_counts = get_unique_tokens_torch_efficient(sub_activations, sub_tokens)\n",
    "\n",
    "(feature_counts[max_indices.copy()] == 1).nonzero(), feature_counts[max_indices.copy()].topk(10)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Centric Viewpoint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'GPT2LMHeadModel' object has no attribute 'tokenizer'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[17], line 10\u001b[0m\n\u001b[1;32m      8\u001b[0m full_tok \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mtensor(dataset[data_ind][\u001b[39m\"\u001b[39m\u001b[39minput_ids\u001b[39m\u001b[39m\"\u001b[39m])\n\u001b[1;32m      9\u001b[0m full_text \u001b[39m=\u001b[39m []\n\u001b[0;32m---> 10\u001b[0m full_text\u001b[39m.\u001b[39mappend(model\u001b[39m.\u001b[39;49mtokenizer\u001b[39m.\u001b[39mdecode(full_tok))\n\u001b[1;32m     11\u001b[0m visualize_text(full_text, feature_ind, model, setting\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mplot\u001b[39m\u001b[39m\"\u001b[39m)\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1614\u001b[0m, in \u001b[0;36mModule.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m   1612\u001b[0m     \u001b[39mif\u001b[39;00m name \u001b[39min\u001b[39;00m modules:\n\u001b[1;32m   1613\u001b[0m         \u001b[39mreturn\u001b[39;00m modules[name]\n\u001b[0;32m-> 1614\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mAttributeError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39m'\u001b[39m\u001b[39m{}\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m object has no attribute \u001b[39m\u001b[39m'\u001b[39m\u001b[39m{}\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39mformat(\n\u001b[1;32m   1615\u001b[0m     \u001b[39mtype\u001b[39m(\u001b[39mself\u001b[39m)\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m, name))\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'GPT2LMHeadModel' object has no attribute 'tokenizer'"
     ]
    }
   ],
   "source": [
    "# Go through datapoints & see if the features that activate on them make sense.\n",
    "d_point = 3\n",
    "text = tokens_dataset[d_point]\n",
    "data_ind, sequence_pos = np.unravel_index(d_point, (datapoints, token_amount))\n",
    "feature_val, feature_ind = dictionary_activations[d_point].topk(10)\n",
    "data_ind = int(data_ind)\n",
    "sequence_pos = int(sequence_pos)\n",
    "full_tok = torch.tensor(dataset[data_ind][\"input_ids\"])\n",
    "full_text = []\n",
    "full_text.append(model.tokenizer.decode(full_tok))\n",
    "visualize_text(full_text, feature_ind, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[  48],\n",
       "         [  51],\n",
       "         [  83],\n",
       "         [ 135],\n",
       "         [ 142],\n",
       "         [ 143],\n",
       "         [ 163],\n",
       "         [ 192],\n",
       "         [ 347],\n",
       "         [ 397],\n",
       "         [ 522],\n",
       "         [ 584],\n",
       "         [ 591],\n",
       "         [ 612],\n",
       "         [ 641],\n",
       "         [ 667],\n",
       "         [ 785],\n",
       "         [ 963],\n",
       "         [1022],\n",
       "         [1206],\n",
       "         [1263],\n",
       "         [1341],\n",
       "         [1690],\n",
       "         [1894],\n",
       "         [2061],\n",
       "         [2099],\n",
       "         [2131],\n",
       "         [2425],\n",
       "         [2579],\n",
       "         [2641],\n",
       "         [2768],\n",
       "         [2815],\n",
       "         [2957],\n",
       "         [3006],\n",
       "         [3171],\n",
       "         [3285],\n",
       "         [3394],\n",
       "         [3488],\n",
       "         [3492],\n",
       "         [3630],\n",
       "         [3950],\n",
       "         [4038],\n",
       "         [4102],\n",
       "         [4128],\n",
       "         [4215],\n",
       "         [4590],\n",
       "         [4633],\n",
       "         [4697],\n",
       "         [4913],\n",
       "         [5082],\n",
       "         [5093],\n",
       "         [5516],\n",
       "         [5734],\n",
       "         [5740],\n",
       "         [5795],\n",
       "         [6182],\n",
       "         [6425],\n",
       "         [6886],\n",
       "         [6937],\n",
       "         [7016],\n",
       "         [8190]]),\n",
       " torch.return_types.topk(\n",
       " values=tensor([12022., 11279.,  8270.,  5347.,  3888.,  2245.,  1578.,  1239.,  1109.,\n",
       "          1088.,  1081.,  1001.,   993.,   909.,   901.,   894.,   882.,   877.,\n",
       "           847.,   824.,   823.,   809.,   788.,   759.,   749.,   735.,   710.,\n",
       "           679.,   676.,   672.,   654.,   649.,   648.,   631.,   631.,   623.,\n",
       "           619.,   616.,   608.,   591.,   588.,   583.,   579.,   577.,   577.,\n",
       "           570.,   569.,   569.,   567.,   565.]),\n",
       " indices=tensor([   0,   15, 2420,    4,    1,  973,  621,  754,   19,  911, 1142, 1621,\n",
       "          499,  348,  782,  374, 2506, 2657, 1972,  130,  457, 1787, 5519, 6766,\n",
       "         1062, 1160,  643, 4050, 2052,  659, 4775, 1778, 5594, 1936,    2, 1513,\n",
       "         5379,  645,  844,  519, 3158, 2780, 2173, 2158, 4035, 1387,  162,  943,\n",
       "         3788, 2112])))"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(feature_counts[max_indices.copy()] == 1).nonzero(), feature_counts[max_indices.copy()].topk(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(609, 0.9476), (1334, 0.8616), (310, 0.8461), (1182, 0.6183), (1556, 0.5948), (1847, 0.5924), (1605, 0.5112), (1047, 0.3043), (474, 0.1071), (124, 0.1009), (2014, 0.0844), (537, 0.0631), (1919, 0.0005), (55, 0.0), (45, 0.0), (0, 0.0), (1, 0.0), (2, 0.0), (3, 0.0), (6, 0.0)]\n"
     ]
    }
   ],
   "source": [
    "# sentences = ['he was rude and mean', \"evil bully\", \" illegal vandalism\", \" ruthless kill\"]\n",
    "# whitelist = dict()\n",
    "# for t in sentences:\n",
    "#     split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "#     token = model.to_tokens(t, prepend_bos=False)\n",
    "#     _, cache = model.run_with_cache(token.to(model.cfg.device))\n",
    "#     neuron_act_batch = cache[cache_name]\n",
    "#     _, act = smaller_auto_encoder(neuron_act_batch)\n",
    "#     features = act[0, -1, :].topk(50).indices\n",
    "#     values = act[0, -1, :].topk(50).values\n",
    "#     blacklist = [1717, 1828, 1291, 1998, 1284, 1415, 1820, 4, 1672, 401, 1752, 2028, 1154, 1971, 1746, 1454, 636, 1287, 1536, 1220, 509, 1156, 1602, 1375, 1129, 413, 1817, 1599, 1724, 1951, 648, 741, 962, 1270, 949, 453, 57, 900, 1394, 1619, 322, 814, 2043, 182, 1474, 1469, 2031, 300, 1576, 1225, 2041, 706, 1614, 177, 814, 133, 1515, 1886, 31]\n",
    "#     for feature, value in zip(features, values):\n",
    "#         if feature not in blacklist:\n",
    "#             if feature in whitelist:\n",
    "#                 whitelist[feature.item()] += value.item()\n",
    "#             else:\n",
    "#                 whitelist[feature.item()] = round(value.item(), 4)\n",
    "# print(sorted(list(whitelist.items()), key=lambda x:x[1], reverse=True))\n",
    "\n",
    "\n",
    "#Adam new version\n",
    "sentences = ['son of a bitch', \"what the fuck\", \"you are a slut\", \" shithead\"]\n",
    "outlier_filter = ['\\newline...\\newline...']\n",
    "# blacklist = [1717, 1828, 1291, 1998, 1284, 1415, 1820, 4, 1672, 401, 1752, 2028, 1154, 1971, 1746, 1454, 636, 1287, 1536, 1220, 509, 1156, 1602, 1375, 1129, 413, 1817, 1599, 1724, 1951, 648, 741, 962, 1270, 949, 453, 57, 900, 1394, 1619, 322, 814, 2043, 182, 1474, 1469, 2031, 300, 1576, 1225, 2041, 706, 1614, 177, 814, 133, 1515, 1886, 31]\n",
    "blacklist = []\n",
    "whitelist = dict()\n",
    "for t in sentences:\n",
    "    split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "    token = model.to_tokens(t, prepend_bos=False)\n",
    "    _, cache = model.run_with_cache(token.to(model.cfg.device))\n",
    "    neuron_act_batch = cache[cache_name]\n",
    "    _, act = smaller_auto_encoder(neuron_act_batch)\n",
    "    features = act[0, -1, :].topk(100).indices\n",
    "    values = act[0, -1, :].topk(100).values\n",
    "    \n",
    "    for feature, value in zip(features, values):\n",
    "        if feature not in blacklist:\n",
    "            if feature in whitelist:\n",
    "                whitelist[feature.item()] += value.item()\n",
    "            else:\n",
    "                whitelist[feature.item()] = round(value.item(), 4)\n",
    "candidates = sorted(list(whitelist.items()), key=lambda x:x[1], reverse=True)\n",
    "final_output = list()\n",
    "for feature, value in candidates:\n",
    "    split_text = model.to_str_tokens(outlier_filter, prepend_bos=False)\n",
    "    token = model.to_tokens(outlier_filter, prepend_bos=False)\n",
    "    _, cache = model.run_with_cache(token.to(model.cfg.device))\n",
    "    neuron_act_batch = cache[cache_name]\n",
    "    _, act = smaller_auto_encoder(neuron_act_batch)\n",
    "    if act[0, 0, feature] < 2:\n",
    "        final_output.append((feature, value))\n",
    "print(final_output[:20])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "feat_index= 1860\n",
      "bias: -2.306019\n",
      "Max feature index: 11\n",
      "MCS: 0.9779872894287109\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-434498c9-a104\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-434498c9-a104\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"Robert\", \" P\", \".\", \" K\", \"og\", \"od\", \"\\\\newline\", \"\\\\newline\", \"Robert\", \" P\", \".\", \" K\", \"og\", \"od\", \" is\", \" a\", \" business\", \" executive\", \" and\", \" philanth\", \"rop\", \"ist\", \".\", \" Along\", \" with\", \" his\", \" brother\", \"-\", \"in\", \"-\", \"law\", \",\", \" Robert\", \" H\", \".\", \" Smith\", \",\", \" K\", \"og\", \"od\", \" led\", \" the\", \" Charles\", \" E\", \".\", \" Smith\", \" Companies\", \",\", \" the\", \" real\", \" estate\", \" company\", \" that\", \" developed\", \" much\", \" of\", \" the\", \" Crystal\", \" City\", \" neighborhood\", \",\", \" just\", \" south\", \" of\", \"\\n\", \"Marg\", \"aret\", \" Harrison\", \"\\\\newline\", \"\\\\newline\", \"Marg\", \"aret\", \" Harrison\", \" (\", \"born\", \" 1940\", \" in\", \" Wake\", \"field\", \",\", \" Yorkshire\", \",\", \" England\", \")\", \" is\", \" an\", \" English\", \" feminist\", \" and\", \" artist\", \" whose\", \" work\", \" uses\", \" a\", \" variety\", \" of\", \" media\", \" and\", \" subject\", \" matter\", \".\", \"\\\\newline\", \"\\\\newline\", \"Life\", \" and\", \" work\", \"\\\\newline\", \"Originally\", \" born\", \" in\", \" Yorkshire\", \",\", \" when\", \" her\", \" father\", \" returned\", \" from\", \" the\", \" war\", \",\", \" her\", \" family\", \" moved\", \" first\", \" to\", \" Brid\", \"lington\", \",\", \" then\", \"\\n\", \"Simon\", \" Town\", \"s\", \"hend\", \"\\\\newline\", \"\\\\newline\", \"It\", \"'s\", \" easy\", \" to\", \" say\", \" that\", \" guitarist\", \" Simon\", \" Town\", \"s\", \"hend\", \" has\", \" spent\", \" his\", \" whole\", \" career\", \" making\", \" music\", \" in\", \" the\", \" shadows\", \" of\", \" his\", \" brother\", \",\", \" Pete\", \" Town\", \"s\", \"hend\", \" of\", \" the\", \" Who\", \".\", \" T\", \"alking\", \" with\", \" Town\", \"s\", \"hend\", \" though\", \",\", \" it\", \"\\u2019\", \"s\", \" clear\", \" that\", \" having\", \" a\", \" famous\", \" brother\", \" hasn\", \"'t\", \" hind\", \"ered\", \" him\", \" one\", \" i\", \"ota\", \"\\n\", \"On\", \" 29\", \" January\", \" 2013\", \",\", \" my\", \" husband\", \" was\", \" called\", \" to\", \" serve\", \" as\", \" a\", \" counselor\", \" in\", \" a\", \" Branch\", \" Pres\", \"idency\", \" in\", \" the\", \" Pro\", \"vo\", \" Mission\", \"ary\", \" Training\", \" Center\", \".\", \" During\", \" this\", \" past\", \" year\", \",\", \" we\", \" have\", \" been\", \" privileged\", \" to\", \" hear\", \" General\", \" Author\", \"ities\", \" speak\", \" to\", \" the\", \" missionaries\", \" each\", \" week\", \" and\", \" have\", \" had\", \" many\", \" touching\", \" and\", \" upl\", \"ifting\", \" experiences\", \".\", \" The\", \" purpose\", \" of\", \" this\", \" blog\", \" is\", \"\\n\", \"C\", \"ork\", \"town\", \":\", \" A\", \" community\", \" on\", \" the\", \" verge\", \" of\", \" change\", \" awa\", \"its\", \" Ford\", \"'s\", \" arrival\", \"\\\\newline\", \"\\\\newline\", \"All\", \"ie\", \" Gross\", \" |\", \" Detroit\", \" Free\", \" Press\", \"\\\\newline\", \"\\\\newline\", \"In\", \" 1979\", \",\", \" Jerry\", \" Est\", \"ers\", \" was\", \" working\", \" on\", \" the\", \" roof\", \" of\", \" a\", \" property\", \" he\", \" had\", \" inherited\", \" from\", \" his\", \" father\", \" in\", \" North\", \" Cork\", \"town\", \" when\", \" he\", \" had\", \" an\", \" ep\", \"iph\", \"any\", \":\", \" He\", \" could\", \" see\", \" downtown\", \".\", \"\\n\", \"Sl\", \"ayer\", \" is\", \" devastated\", \" to\", \" inform\", \" that\", \" their\", \" band\", \"mate\", \" and\", \" brother\", \",\", \" Jeff\", \" Hann\", \"eman\", \",\", \" passed\", \" away\", \" at\", \" about\", \" 11\", \"AM\", \" this\", \" morning\", \" near\", \" his\", \" Southern\", \" California\", \" home\", \".\", \" Hann\", \"eman\", \" was\", \" in\", \" an\", \" area\", \" hospital\", \" when\", \" he\", \" suffered\", \" liver\", \" failure\", \".\", \" He\", \" is\", \" survived\", \" by\", \" his\", \" wife\", \" Kathy\", \",\", \" his\", \" sister\", \" Kathy\", \" and\", \" his\", \" brothers\", \" Michael\", \" and\", \" Larry\", \",\", \" and\", \" will\", \"\\n\", \"G\", \"arn\", \"et\", \":\", \" She\", \" must\", \" be\", \" upset\", \" that\", \" her\", \" son\", \" was\", \" taken\", \" into\", \" space\", \" by\", \" those\", \" Home\", \"world\", \" G\", \"ems\", \".\", \"\\\\newline\", \"\\\\newline\", \"Steven\", \":\", \" You\", \" mean\", \" On\", \"ion\", \"?\", \" He\", \" isn\", \"\\u2019\", \"t\", \" in\", \" space\", \".\", \"\\\\newline\", \"\\\\newline\", \"G\", \"arn\", \"et\", \":\", \" Sorry\", \",\", \" I\", \" must\", \" be\", \" thinking\", \" of\", \" a\", \"\\\\newline\", \"\\\\newline\", \"different\", \" timeline\", \"\\\\newline\", \"\\\\newline\", \".\", \"\\\\newline\\\\newline\\\\newline\\\\newline\\\\newline\", \"\\\\newline\", \"From\", \" the\", \" episode\", \"\\n\", \"Stephen\", \" King\", \" Is\", \" Email\", \" Budd\", \"ies\", \" With\", \" the\", \" '\", \"Str\", \"anger\", \" Things\", \"'\", \" Creat\", \"ors\", \"\\\\newline\", \"\\\\newline\", \"\\\"\", \"We\", \" spend\", \" a\", \" lot\", \" of\", \" time\", \" and\", \" make\", \" sure\", \" the\", \" grammar\", \" is\", \" right\", \",\\\"\", \" Matt\", \" D\", \"uffer\", \",\", \" who\", \" created\", \" the\", \" Netflix\", \" phenomenon\", \" with\", \" his\", \" brother\", \",\", \" tells\", \" TH\", \"R\", \" about\", \" composing\", \" replies\", \" to\", \" King\", \" (\", \"who\", \"'s\", \" a\", \" major\", \" inspiration\", \").\", \"\\\\newline\", \"\\\\newline\", \"Ex\", \"changing\", \"\\n\", \"He\", \" was\", \" out\", \" last\", \" night\", \" with\", \" his\", \" wife\", \" Anne\", \"-\", \"Marie\", \" D\", \"uff\", \" at\", \" the\", \" press\", \" night\", \" for\", \" Cause\", \" Cele\", \"bre\", \" at\", \" the\", \" Old\", \" Vic\", \" Theatre\", \".\", \" D\", \"uff\", \",\", \" naturally\", \",\", \" is\", \" receiving\", \" amazing\", \" reviews\", \" for\", \" her\", \" performance\", \".\", \" It\", \"\\u2019\", \"s\", \" her\", \" first\", \" role\", \" since\", \" they\", \" became\", \" parents\", \".\", \"\\\\newline\", \"\\\\newline\", \"What\", \"\\u2019\", \"s\", \" this\", \" about\", \" the\", \" Original\", \" F\", \"iona\", \"?\", \"\\\\newline\", \"\\n\", \"This\", \" was\", \" great\", \" for\", \" a\", \" number\", \" of\", \" reasons\", \" -\", \" a\", \" nice\", \" dinner\", \" with\", \" my\", \" sister\", \",\", \" mum\", \" and\", \" husband\", \",\", \" the\", \" food\", \" is\", \" fantastic\", \",\", \" I\", \" love\", \" the\", \" restaurant\", \" (\", \"as\", \" you\", \" you\", \" will\", \" from\", \" this\", \" earlier\", \" post\", \"),\", \" and\", \" because\", \" it\", \" was\", \" family\", \" I\", \" got\", \" to\", \" try\", \" everyone\", \" else\", \"'s\", \" stuff\", \"!\", \"\\\\newline\", \"\\\\newline\", \"The\", \" giant\", \" tube\", \" of\", \" delicious\", \"ness\", \" you\", \" see\", \" in\", \"\\n\"], \"activations\": [[[1.1237397193908691]], [[0.0]], [[0.8312098979949951]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.487404823303223]], [[0.0]], [[0.0]], [[0.0]], [[0.6308889389038086]], [[0.0]], [[0.48835062980651855]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.7235243320465088]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.447540283203125]], [[0.0]], [[0.0]], [[0.0]], [[0.14442992210388184]], [[0.0]], [[0.0]], [[2.2016823291778564]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.879441499710083]], [[0.0]], [[0.0]], [[0.0]], [[0.3761427402496338]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.04551100730895996]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.3497209548950195]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[2.9807679653167725]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.29371166229248047]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.295416831970215]], [[0.24976658821105957]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.8895666599273682]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.7884716987609863]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.09139418601989746]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.4861598014831543]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.15541839599609375]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.242444038391113]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.8578763008117676]], [[0.9969093799591064]], [[0.0]], [[3.306063413619995]], [[0.0]], [[0.1110994815826416]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.17795634269714355]], [[0.7144575119018555]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[3.6158220767974854]], [[0.015366315841674805]], [[0.0]], [[0.0]], [[4.221622467041016]], [[0.0]], [[0.0]], [[0.0]], [[3.0881574153900146]], [[0.0]], [[0.0]], [[0.3661534786224365]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.1531529426574707]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.168643951416016]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.5783448219299316]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.8366611003875732]], [[0.6762313842773438]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.2905762195587158]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.124711990356445]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.1938197612762451]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.115779876708984]], [[0.2940964698791504]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.8323042392730713]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.108628749847412]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.15837788581848145]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0894923210144043]], [[0.0]], [[0.0]], [[4.070412635803223]], [[0.0]], [[1.560197114944458]], [[0.0]], [[2.66496205329895]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.2698054313659668]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0012252330780029297]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f10664f18a0>"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N = 11\n",
    "best_feature = int(max_indices[N])\n",
    "print(\"feat_index=\", best_feature)\n",
    "best_feature = 1605#feature num 10\n",
    "\n",
    "print(\"bias:\", smaller_auto_encoder.encoder_bias.detach().cpu().numpy()[best_feature])\n",
    "print(f\"Max feature index: {N}\")\n",
    "print(f\"MCS: {max_cosine_similarities[best_feature]}\")\n",
    "# text_list, full_text, token_list, full_token_list = get_feature_datapoints(best_feature, dictionary_activations, dataset, setting=\"uniform\")\n",
    "text_list, full_text, token_list, full_token_list = get_feature_datapoints(best_feature, dictionary_activations, dataset, setting=\"max\")\n",
    "visualize_text(full_text, best_feature, model, setting=\"plot\")\n",
    "# visualize_text(text_list, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-863c29b1-6e50\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-863c29b1-6e50\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\":\", \"\\\\newline\", \"\\\\newline\", \"Ke\", \"eping\", \" authentication\", \" state\", \" between\", \" Fire\", \"base\", \" -\", \" Web\", \"App\", \" (.\", \"NET\", \" Core\", \" MVC\", \")\", \"\\\\newline\", \"\\\\newline\", \"I\", \" am\", \" creating\", \" an\", \" ASP\", \".\", \"NET\", \" Core\", \" MVC\", \" app\", \",\", \" where\", \" the\", \" authentication\", \" provider\", \" will\", \" be\", \" Fire\", \"Base\", \".\", \"\\\\newline\", \"My\", \" Web\", \" App\", \" is\", \" hosted\", \" in\", \" Azure\", \" and\", \",\", \" once\", \" user\", \" signs\", \" in\", \",\", \" it\", \" sends\", \" an\", \" H\", \"TTPS\", \" request\", \" to\", \" my\", \"\\n\", \":\", \"\\\\newline\", \"\\\\newline\", \"Regex\", \" for\", \" overlapping\", \" matches\", \"\\\\newline\", \"\\\\newline\", \"For\", \" a\", \" lingu\", \"istics\", \" project\", \" I\", \" am\", \" trying\", \" to\", \" match\", \" all\", \" occurrences\", \" of\", \" one\", \" or\", \" two\", \" cons\", \"on\", \"ants\", \" between\", \" vow\", \"els\", \" in\", \" some\", \" text\", \".\", \" I\", \" am\", \" trying\", \" to\", \" write\", \" a\", \" very\", \" simple\", \" mat\", \"cher\", \" in\", \" PHP\", \" (\", \"p\", \"reg\", \"_\", \"match\", \"_\", \"all\", \"),\", \" but\", \" once\", \" the\", \" match\", \" is\", \" consumed\", \",\", \" it\", \"\\n\", \" once\", \" thought\", \" the\", \" hardest\", \" thing\", \" about\", \" adulthood\", \" was\", \" putting\", \" a\", \" Weber\", \" grill\", \" cover\", \" back\", \" in\", \" place\", \".\", \" Now\", \"?\", \" It\", \"\\u2019\", \"s\", \" believing\", \" anything\", \" that\", \" comes\", \" out\", \" of\", \" Roger\", \" Good\", \"ell\", \"\\u2019\", \"s\", \" offices\", \".\", \"\\\\newline\", \"\\\\newline\", \"Last\", \" week\", \" the\", \" NFL\", \" changed\", \" the\", \" start\", \" of\", \" the\", \" Steelers\", \"-\", \"Chief\", \"s\", \" playoff\", \" game\", \" from\", \" early\", \" afternoon\", \" to\", \" deep\", \" into\", \" prime\", \" time\", \",\", \" claiming\", \" an\", \"\\n\", \"-\", \"ever\", \"?\", \" Competition\", \" remedies\", \" in\", \" the\", \" audit\", \" market\", \"\\\\newline\", \"\\\\newline\", \"Ox\", \"era\", \"\\\\newline\", \"\\\\newline\", \"In\", \" light\", \" of\", \" recent\", \" accounting\", \" sc\", \"andals\", \",\", \" there\", \" are\", \" widespread\", \" calls\", \" for\", \" the\", \" UK\", \" competition\", \" authority\", \" to\", \" re\", \"-\", \"ex\", \"amine\", \" the\", \" audit\", \" market\", \".\", \" Yet\", \" spending\", \" a\", \" substantial\", \" amount\", \" of\", \" resources\", \" on\", \" a\", \" market\", \" investigation\", \",\", \" and\", \" concluding\", \" once\", \" again\", \" that\", \" there\", \" is\", \" a\", \" competition\", \" problem\", \"\\n\", \":\", \"\\\\newline\", \"\\\\newline\", \"ViewModel\", \" class\", \" throwing\", \" a\", \" null\", \" pointer\", \" when\", \" trying\", \" to\", \" display\", \" results\", \" from\", \" repository\", \"\\\\newline\", \"\\\\newline\", \"I\", \" am\", \" trying\", \" to\", \" display\", \" results\", \" from\", \" the\", \" api\", \" once\", \" someone\", \" clicks\", \" on\", \" the\", \" adapter\", \",\", \" I\", \" am\", \" however\", \" experiencing\", \" a\", \" null\", \" pointer\", \" with\", \" the\", \" view\", \" model\", \" class\", \".\", \" This\", \" is\", \" the\", \" method\", \" that\", \" I\", \" want\", \" to\", \" display\", \" results\", \" with\", \" in\", \" my\", \" Match\", \"Detail\", \"Activity\", \"\\n\", \":\", \"\\\\newline\", \"\\\\newline\", \"Can\", \" someone\", \" explain\", \" how\", \" Sales\", \"force\", \" works\", \" with\", \" CT\", \"I\", \"?\", \" (\", \"Av\", \"aya\", \")\", \"\\\\newline\", \"\\\\newline\", \"I\", \" have\", \" a\", \" client\", \" who\", \" has\", \" Sales\", \"force\", \" and\", \" uses\", \" an\", \" Av\", \"aya\", \" switch\", \" to\", \" run\", \" their\", \" call\", \" center\", \".\", \" They\", \" enter\", \" in\", \" random\", \" call\", \" information\", \" into\", \" this\", \" old\", \" legacy\", \" program\", \" called\", \" Om\", \"ni\", \" and\", \" once\", \" a\", \" week\", \" they\", \" manually\", \" update\", \" Sales\", \"force\", \"\\n\", \" up\", \" for\", \" our\", \" newsletter\", \"\\\\newline\", \"\\\\newline\", \"Stay\", \" in\", \" touch\", \" with\", \" Dr\", \".\", \" Levy\", \" as\", \" he\", \" travels\", \" the\", \" world\", \" sharing\", \" helpful\", \" hints\", \" for\", \" healthy\", \" relationships\", \".\", \" News\", \"letters\", \" will\", \" hit\", \" your\", \" email\", \" inbox\", \" once\", \" a\", \" month\", \".\", \" We\", \" won\", \"\\u2019\", \"t\", \" share\", \" your\", \" email\", \" with\", \" anyone\", \" for\", \" any\", \" reason\", \".\", \"\\\\newline\", \"\\\\newline\", \"Success\", \"!\", \"\\\\newline\", \"\\\\newline\", \"Our\", \" Treatment\", \"\\\\newline\", \"\\\\newline\", \"Ad\", \"ult\", \"/\", \"C\", \"\\n\", \" had\", \" about\", \" 15\", \" albums\", \" of\", \" pictures\", \" I\", \" had\", \" taken\", \" over\", \" 50\", \" years\", \".\", \" I\", \" was\", \" so\", \" sick\", \" of\", \" thinking\", \" about\", \" them\", \",\", \" my\", \" son\", \" told\", \" me\", \" to\", \" put\", \" them\", \" in\", \" the\", \" freezer\", \".\", \" Every\", \" once\", \" and\", \" awhile\", \" I\", \" pull\", \" one\", \" out\", \" and\", \" remove\", \" some\", \" pictures\", \" and\", \" lay\", \" them\", \" out\", \" to\", \" dry\", \".\", \" Many\", \" of\", \" them\", \" have\", \" mold\", \" around\", \" the\", \" edges\", \" but\", \" still\", \" they\", \"\\n\", \":\", \"\\\\newline\", \"\\\\newline\", \"How\", \" to\", \" properly\", \" chain\", \" promises\", \" inside\", \" of\", \" a\", \" for\", \"Each\", \" loop\", \" in\", \" Javascript\", \"\\\\newline\", \"\\\\newline\", \"I\", \"'m\", \" using\", \" m\", \"ongo\", \" and\", \" need\", \" to\", \" do\", \" an\", \" async\", \" call\", \" for\", \" each\", \" item\", \" inside\", \" of\", \" a\", \" loop\", \".\", \" I\", \"'d\", \" like\", \" to\", \" execute\", \" another\", \" command\", \" once\", \" all\", \" of\", \" the\", \" promises\", \" inside\", \" of\", \" the\", \" loop\", \" have\", \" completed\", \",\", \" but\", \" so\", \" far\", \" the\", \" promises\", \" in\", \"\\n\", \" Content\", \" The\", \" Science\", \" Behind\", \" Our\", \" Search\", \" for\", \" Wal\", \"do\", \"\\\\newline\", \"\\\\newline\", \"In\", \" London\", \",\", \" Benjamin\", \" Franklin\", \" once\", \" opened\", \" a\", \" bottle\", \" of\", \" fortified\", \" wine\", \" from\", \" Virginia\", \" and\", \" poured\", \" out\", \",\", \" along\", \" with\", \" the\", \" refresh\", \"ment\", \",\", \" three\", \" drowned\", \" flies\", \",\", \" two\", \" of\", \" which\", \" revived\", \" after\", \" a\", \" few\", \" hours\", \" and\", \" flew\", \" away\", \".\", \" Ever\", \" the\", \" vision\", \"ary\", \",\", \" he\", \" wondered\", \" about\", \" the\", \" possibility\", \" of\", \" incarcer\", \"\\n\"], \"activations\": [[[0.0]], [[3.378838300704956e-05]], [[0.0]], [[0.0]], [[0.0]], [[-0.0007534027099609375]], [[-0.0011229515075683594]], [[-0.0006957054138183594]], [[-0.0009698867797851562]], [[0.0]], [[0.0009450912475585938]], [[0.000774383544921875]], [[0.0]], [[-0.000820159912109375]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0001112222671508789]], [[0.0]], [[0.0002955198287963867]], [[0.0]], [[5.626678466796875e-05]], [[-0.00021600723266601562]], [[0.0]], [[0.0]], [[3.6582350730895996e-06]], [[9.775161743164062e-06]], [[0.00011432170867919922]], [[-2.384185791015625e-07]], [[-0.0002665519714355469]], [[-0.0013213157653808594]], [[-0.0007228851318359375]], [[-0.0006554126739501953]], [[0.0]], [[0.000988006591796875]], [[0.0]], [[0.0003986358642578125]], [[0.0]], [[0.0]], [[7.081031799316406e-05]], [[0.0009014606475830078]], [[0.0]], [[0.0]], [[0.00034117698669433594]], [[0.0025177001953125]], [[0.0]], [[-0.0003533363342285156]], [[-0.0008401870727539062]], [[-0.0014433860778808594]], [[-0.019542217254638672]], [[0.167999267578125]], [[-0.8876199722290039]], [[-0.17511224746704102]], [[-0.07263737916946411]], [[0.28135085105895996]], [[0.03174924850463867]], [[-0.02684950828552246]], [[0.003586292266845703]], [[-3.7997961044311523e-06]], [[-0.006216526031494141]], [[-0.009515881538391113]], [[0.07311367988586426]], [[0.0]], [[0.0]], [[1.3113021850585938e-05]], [[0.0]], [[0.0]], [[-0.0002567768096923828]], [[0.0012340545654296875]], [[-0.00048542022705078125]], [[-2.09808349609375e-05]], [[-4.145503044128418e-05]], [[0.0006456375122070312]], [[0.0003657341003417969]], [[-0.0007219314575195312]], [[0.0]], [[0.0]], [[0.0002830028533935547]], [[0.0]], [[0.0]], [[7.713213562965393e-06]], [[0.00010895729064941406]], [[0.000644683837890625]], [[-0.00131988525390625]], [[0.00022771954536437988]], [[0.00035762786865234375]], [[-0.0007865428924560547]], [[0.0]], [[0.0]], [[0.0]], [[-0.0012912154197692871]], [[0.0006084442138671875]], [[-2.384185791015625e-06]], [[0.0]], [[4.5299530029296875e-06]], [[-0.0007762908935546875]], [[-0.00011348724365234375]], [[0.0011620521545410156]], [[0.0015908479690551758]], [[4.76837158203125e-07]], [[-1.1920928955078125e-07]], [[0.0001652352511882782]], [[-0.00045490264892578125]], [[-0.001664876937866211]], [[-0.0021944046020507812]], [[-1.1920928955078125e-07]], [[0.0]], [[4.76837158203125e-07]], [[-1.811981201171875e-05]], [[0.01666879653930664]], [[-0.0005614757537841797]], [[-0.0025382041931152344]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.76837158203125e-07]], [[0.005850791931152344]], [[-0.03844594955444336]], [[0.13746213912963867]], [[-0.40128159523010254]], [[-0.21447241306304932]], [[-0.2873811721801758]], [[-0.11993169784545898]], [[-0.022560834884643555]], [[0.0]], [[0.0]], [[0.45820045471191406]], [[0.008760213851928711]], [[0.0850677490234375]], [[-0.01835489273071289]], [[0.06855058670043945]], [[-0.014801025390625]], [[-0.12147212028503418]], [[-0.0960383415222168]], [[-0.015365839004516602]], [[-0.004151344299316406]], [[-0.01597309112548828]], [[-0.037438392639160156]], [[-0.03545236587524414]], [[0.030066251754760742]], [[-0.009754180908203125]], [[0.01655864715576172]], [[-0.01821279525756836]], [[0.023926258087158203]], [[-0.006653785705566406]], [[-0.021042823791503906]], [[-0.0002260534092783928]], [[-0.0022821426391601562]], [[0.011954307556152344]], [[-0.00026535987854003906]], [[0.01826643943786621]], [[0.0037547945976257324]], [[-0.001164168119430542]], [[-0.013455390930175781]], [[-0.0033669471740722656]], [[0.0008474588394165039]], [[-0.0010207295417785645]], [[-4.043802618980408e-06]], [[0.002166748046875]], [[0.0029860734939575195]], [[0.004075169563293457]], [[-6.32554292678833e-05]], [[-0.020339488983154297]], [[-0.001215815544128418]], [[-0.0019173622131347656]], [[-0.00386810302734375]], [[-0.0009522438049316406]], [[0.0023326873779296875]], [[0.0007810592651367188]], [[-0.0002282261848449707]], [[-6.777048110961914e-05]], [[-0.0021181106567382812]], [[-5.4836273193359375e-05]], [[-0.000156402587890625]], [[3.6405399441719055e-06]], [[0.0006489753723144531]], [[-0.0009050965309143066]], [[-0.00043487548828125]], [[0.0006351470947265625]], [[-0.0011224746704101562]], [[0.00015476346015930176]], [[0.0002269744873046875]], [[-0.0008461475372314453]], [[-0.0009584426879882812]], [[-0.0009759664535522461]], [[-0.0008649826049804688]], [[-0.0014142990112304688]], [[0.0009236335754394531]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0033702850341796875]], [[0.0026760101318359375]], [[-0.0003368854522705078]], [[-0.00039076805114746094]], [[0.0]], [[0.0022993087768554688]], [[-5.1975250244140625e-05]], [[0.0]], [[-0.0036172866821289062]], [[0.0]], [[0.0002281665802001953]], [[3.199279308319092e-05]], [[-0.003280162811279297]], [[-7.43865966796875e-05]], [[-8.33161175251007e-06]], [[0.005178928375244141]], [[0.00119781494140625]], [[0.0009260177612304688]], [[1.1026859283447266e-06]], [[1.52587890625e-05]], [[-0.0006258487701416016]], [[3.5762786865234375e-07]], [[-0.00122833251953125]], [[-1.9073486328125e-06]], [[0.0]], [[-0.0004444122314453125]], [[-1.9073486328125e-06]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[-0.001349329948425293]], [[-0.0002942085266113281]], [[0.0]], [[4.392862319946289e-05]], [[0.003543376922607422]], [[0.00038623809814453125]], [[-0.00030231475830078125]], [[0.0024013519287109375]], [[-0.0021032094955444336]], [[-0.00034910067915916443]], [[0.0006527900695800781]], [[0.0009266138076782227]], [[-0.0007443428039550781]], [[0.008822917938232422]], [[-0.0037860870361328125]], [[-0.0010132789611816406]], [[0.0014829635620117188]], [[-0.004467010498046875]], [[-0.03918743133544922]], [[-4.489819526672363]], [[-0.02739158272743225]], [[-0.008008003234863281]], [[0.013097584247589111]], [[-0.042143940925598145]], [[-0.08424186706542969]], [[0.1403369903564453]], [[0.0]], [[0.0]], [[4.8026442527770996e-05]], [[0.0]], [[0.0]], [[-0.0010442733764648438]], [[0.0]], [[-0.0011730194091796875]], [[0.0]], [[0.0]], [[5.2928924560546875e-05]], [[0.0024042129516601562]], [[0.0]], [[0.0033991336822509766]], [[-0.0021529197692871094]], [[0.0003311634063720703]], [[-0.00041484832763671875]], [[0.0003261566162109375]], [[0.0]], [[0.0007113218307495117]], [[3.075599670410156e-05]], [[0.0004731416702270508]], [[3.0467286705970764e-05]], [[0.0005765557289123535]], [[-0.00039637088775634766]], [[0.0003300905227661133]], [[3.218650817871094e-05]], [[0.0005092620849609375]], [[-0.0008726119995117188]], [[0.02141427993774414]], [[-0.7210922241210938]], [[0.053229331970214844]], [[-0.020885705947875977]], [[-0.00026416778564453125]], [[-0.2624659538269043]], [[-0.07625675201416016]], [[-0.00399172306060791]], [[0.02374553680419922]], [[-0.005359172821044922]], [[-0.007158160209655762]], [[-0.002154111862182617]], [[-0.00038301944732666016]], [[-0.000324249267578125]], [[-0.012115716934204102]], [[0.004102230072021484]], [[-0.013505220413208008]], [[0.0005426406860351562]], [[-0.0012695789337158203]], [[-0.011892318725585938]], [[-0.005379796028137207]], [[-0.00254058837890625]], [[-0.0008459091186523438]], [[-0.00018930435180664062]], [[-0.002387791872024536]], [[-0.002948760986328125]], [[-9.728968143463135e-05]], [[0.0013052821159362793]], [[-0.0035424232482910156]], [[-0.052915096282958984]], [[0.002719402313232422]], [[0.0049495697021484375]], [[0.015152931213378906]], [[0.008776187896728516]], [[0.018648147583007812]], [[0.0]], [[0.0]], [[3.317743539810181e-05]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[-0.0004476308822631836]], [[-0.0014543533325195312]], [[-0.00011339783668518066]], [[0.00036334991455078125]], [[5.9604644775390625e-06]], [[0.00051116943359375]], [[1.9073486328125e-05]], [[0.00020432472229003906]], [[-0.0011081695556640625]], [[0.0004138946533203125]], [[9.5367431640625e-07]], [[0.0001290440559387207]], [[0.00014087557792663574]], [[2.561509609222412e-05]], [[-0.0001283884048461914]], [[0.00037848949432373047]], [[0.00010263919830322266]], [[-0.001499176025390625]], [[-2.956390380859375e-05]], [[0.00016748905181884766]], [[-0.0021610260009765625]], [[0.0]], [[0.0]], [[-0.0015392303466796875]], [[-1.33514404296875e-05]], [[0.0]], [[0.0]], [[0.0]], [[0.012113213539123535]], [[0.005342960357666016]], [[-0.00014090538024902344]], [[0.0]], [[0.000644683837890625]], [[0.0002022385597229004]], [[0.0020020008087158203]], [[-0.0008440017700195312]], [[-0.001964092254638672]], [[-0.009461402893066406]], [[0.0]], [[-0.0019192695617675781]], [[0.0003514289855957031]], [[0.003991603851318359]], [[0.0]], [[0.0]], [[0.0]], [[-0.0040378570556640625]], [[-0.0027494430541992188]], [[0.0]], [[-0.0012998580932617188]], [[-0.01042795181274414]], [[-0.2991180419921875]], [[-0.42805004119873047]], [[-0.017977356910705566]], [[-0.20868968963623047]], [[0.005145549774169922]], [[-0.02387237548828125]], [[6.766850128769875e-05]], [[0.0]], [[0.0]], [[6.628036499023438e-05]], [[7.939338684082031e-05]], [[0.0]], [[0.0]], [[0.0]], [[0.00013446807861328125]], [[-6.628036499023438e-05]], [[4.0531158447265625e-06]], [[1.9788742065429688e-05]], [[-0.00022268295288085938]], [[0.0]], [[0.0]], [[0.00018072128295898438]], [[0.0001035928726196289]], [[-0.0006647109985351562]], [[0.00013113021850585938]], [[1.5497207641601562e-06]], [[-9.5367431640625e-07]], [[0.0006475448608398438]], [[0.003631591796875]], [[-0.0008931159973144531]], [[0.004070281982421875]], [[0.0]], [[-5.8770179748535156e-05]], [[0.0020656585693359375]], [[0.0006105303764343262]], [[0.0005273818969726562]], [[0.0]], [[-7.462501525878906e-05]], [[0.0]], [[0.0]], [[0.0]], [[-0.7590861320495605]], [[-0.054702043533325195]], [[-0.02966463565826416]], [[-0.0008854866027832031]], [[-0.0013394355773925781]], [[-0.0071204304695129395]], [[-1.1920565157197416e-07]], [[0.003687143325805664]], [[0.003582000732421875]], [[-0.0052127838134765625]], [[-0.0007445812225341797]], [[-0.0002694129943847656]], [[-0.0012273788452148438]], [[0.0016963481903076172]], [[-0.0004174858331680298]], [[-0.0012444257736206055]], [[-0.0007641315460205078]], [[-2.3037195205688477e-05]], [[-0.0007143020629882812]], [[4.00543212890625e-05]], [[0.00020268559455871582]], [[2.3543834686279297e-05]], [[-0.000335693359375]], [[0.0017757415771484375]], [[0.0001671314239501953]], [[4.088506102561951e-06]], [[-0.0005660057067871094]], [[0.0003273487091064453]], [[8.20159912109375e-05]], [[0.00017833709716796875]], [[0.0]], [[0.0]], [[-0.00046443939208984375]], [[-0.00107574462890625]], [[3.4332275390625e-05]], [[-2.6226043701171875e-05]], [[0.0007009506225585938]], [[-0.0007162094116210938]], [[-3.0994415283203125e-06]], [[-1.3113021850585938e-06]], [[0.0003495216369628906]], [[0.00047206878662109375]], [[-2.384185791015625e-07]], [[-0.0018029212951660156]], [[-0.00015223026275634766]], [[0.00023794174194335938]], [[0.002383708953857422]], [[0.0]], [[4.482269287109375e-05]], [[-0.00022745132446289062]], [[-0.0001882314682006836]], [[0.004290103912353516]], [[-2.384185791015625e-06]], [[-0.0011463165283203125]], [[-0.0064640045166015625]], [[-0.0015807151794433594]], [[0.00024272501468658447]], [[0.0001316070556640625]], [[0.000873565673828125]], [[0.002397298812866211]], [[9.5367431640625e-07]], [[-0.0009865760803222656]], [[-1.811981201171875e-05]], [[0.0004589557647705078]], [[-0.004163265228271484]], [[-0.0006151199340820312]], [[0.44899773597717285]], [[-0.14746952056884766]], [[-0.008595585823059082]], [[0.008181571960449219]], [[-0.06767034530639648]], [[-0.05238747596740723]], [[-0.01117253303527832]], [[-0.0233154296875]], [[-0.01845550537109375]], [[-0.008703231811523438]], [[0.003028392791748047]], [[-0.0030469894409179688]], [[-0.006383776664733887]], [[-0.0022792816162109375]], [[-0.0001373291015625]], [[0.0010902881622314453]], [[-0.0029960274696350098]], [[0.010222434997558594]], [[-0.024421334266662598]], [[-0.005380392074584961]], [[0.007482290267944336]], [[0.006302833557128906]], [[-0.0007190704345703125]], [[0.0014657974243164062]], [[-0.004417896270751953]], [[0.0012350082397460938]], [[-0.0008046627044677734]], [[0.00045037269592285156]], [[0.0]], [[0.0]], [[2.7544796466827393e-05]], [[0.0]], [[0.0]], [[-3.921985626220703e-05]], [[0.0]], [[0.0]], [[-3.62396240234375e-05]], [[0.0010862350463867188]], [[0.0006632804870605469]], [[-0.0002300739288330078]], [[0.0]], [[-0.0008435249328613281]], [[0.0]], [[5.245208740234375e-06]], [[0.0016384124755859375]], [[0.00010895729064941406]], [[0.0]], [[0.0011167526245117188]], [[2.849102020263672e-05]], [[-0.00025200843811035156]], [[-0.0013837814331054688]], [[0.0]], [[1.430511474609375e-06]], [[0.0005474090576171875]], [[-3.1501054763793945e-05]], [[1.7642974853515625e-05]], [[-0.0001456737518310547]], [[-0.001359701156616211]], [[4.76837158203125e-06]], [[-0.0004146099090576172]], [[-0.0001837015151977539]], [[0.0005311965942382812]], [[0.002017498016357422]], [[0.0005251169204711914]], [[0.00010609626770019531]], [[6.151199340820312e-05]], [[-1.0192394256591797e-05]], [[0.0031293630599975586]], [[-0.0002079010009765625]], [[0.0008040964603424072]], [[0.00025644898414611816]], [[-5.7697296142578125e-05]], [[-0.0003247261047363281]], [[0.0003542900085449219]], [[-0.006580352783203125]], [[0.2656550407409668]], [[0.045510053634643555]], [[-0.006206423044204712]], [[-0.03867483139038086]], [[0.8791851997375488]], [[-0.02770829200744629]], [[-0.029144227504730225]], [[-0.03357642889022827]], [[-0.7579760551452637]], [[-0.5034141540527344]], [[0.007077932357788086]], [[0.015504121780395508]], [[-0.006384372711181641]], [[-0.0005331765860319138]], [[-0.005769491195678711]], [[-0.008450984954833984]], [[0.0011448860168457031]], [[0.0]], [[0.0]], [[0.0]], [[0.0015454292297363281]], [[0.0018868446350097656]], [[0.0008697509765625]], [[4.76837158203125e-07]], [[7.081031799316406e-05]], [[-0.0031280517578125]], [[0.0]], [[1.5735626220703125e-05]], [[1.817941665649414e-06]], [[-0.0002722740173339844]], [[-0.0007381439208984375]], [[-2.8312206268310547e-05]], [[-0.0031347274780273438]], [[0.0]], [[0.0]], [[0.7216405868530273]], [[0.06362557411193848]], [[-0.06168794631958008]], [[-0.022331222891807556]], [[0.056041717529296875]], [[0.009789466857910156]], [[-0.047867774963378906]], [[-0.008362293243408203]], [[0.01745915412902832]], [[-0.0075969696044921875]], [[-0.009665489196777344]], [[-0.01068115234375]], [[-0.004502296447753906]], [[0.0023048818111419678]], [[-0.0034821033477783203]], [[0.010705947875976562]], [[-0.0009095072746276855]], [[-0.33289241790771484]], [[-0.024274349212646484]], [[-0.013939857482910156]], [[0.015001296997070312]], [[-0.0071953535079956055]], [[0.03774547576904297]], [[0.0038933753967285156]], [[-0.0016040802001953125]], [[-0.056133270263671875]], [[0.028243064880371094]], [[0.002558112144470215]], [[-0.005761623382568359]], [[-0.0007841587066650391]], [[-0.003004789352416992]], [[-0.014275550842285156]], [[-0.004143476486206055]], [[-0.005158782005310059]], [[0.01611804962158203]], [[0.004620790481567383]], [[-0.0024166107177734375]], [[-0.0035598278045654297]], [[-0.004886627197265625]], [[0.009462833404541016]], [[0.008183956146240234]], [[-0.008491039276123047]], [[0.0010567903518676758]], [[-0.014866352081298828]], [[0.00016736984252929688]], [[-0.0056324005126953125]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f106754fcd0>"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visualize_logit_diff(full_text, best_feature)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['noon', 'dorff', 'eenth', 'java', 'berry', 'zzo', 'buk', '\\\\^[-', 'geant', 'ij', 'ppat', 'gres', 'för', 'ijk', 'yy', 'oming', 'burg', 'ftware', '\\n\\xa0\\xa0', ' prayers']\n",
      "tensor([1.7926, 1.7021, 1.5825, 1.5471, 1.5425, 1.4683, 1.4476, 1.4455, 1.4290,\n",
      "        1.4202, 1.4160, 1.4139, 1.4097, 1.3952, 1.3886, 1.3866, 1.3680, 1.3645,\n",
      "        1.3616, 1.3534])\n"
     ]
    }
   ],
   "source": [
    "with torch.no_grad():\n",
    "    bad_ind = (model.W_U.norm(dim=0) > 20)\n",
    "    feature_direction = smaller_dict[best_feature].to(device)\n",
    "    # residual_direction = torch.matmul(feature_direction, model.W_out[layer]) # Add bias\n",
    "    # feature_direction = model.ln_final(feature_direction)\n",
    "    logits = torch.matmul(feature_direction, model.W_U).cpu()\n",
    "    # logits = model.W_U(residual_direction).cpu()\n",
    "# Don't include bad indices\n",
    "logits[bad_ind] = -1000\n",
    "topk_values, topk_indices = torch.topk(logits, 20)\n",
    "top_text = model.to_str_tokens(topk_indices)\n",
    "print(f\"{top_text}\")\n",
    "print(topk_values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-749eedff-57d5\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-749eedff-57d5\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"/*\", \" ___\", \"DIS\", \"CLAIM\", \"ER\", \"___\", \" */\", \"\\n\", \"<?\", \"php\", \"\\\\newline\", \"\\\\newline\", \"/**\", \"\\\\newline\", \" *\", \" This\", \" file\", \" is\", \" part\", \" of\", \" the\", \" Net\", \"te\", \" Framework\", \" (\", \"https\", \"://\", \"net\", \"te\", \".\", \"org\", \")\", \"\\\\newline\", \" *\", \" Copyright\", \" (\", \"c\", \")\", \" 2004\", \" David\", \" Gr\", \"ud\", \"l\", \" (\", \"https\", \"://\", \"dav\", \"id\", \"gr\", \"ud\", \"l\", \".\", \"com\", \")\", \"\\\\newline\", \" */\", \"\\n\", \"/*\", \"------------------------------------------------\", \"--------------\", \"\\\\newline\", \"#\", \" Illustr\", \"ations\", \"\\\\newline\", \"------------------------------------------------\", \"--------------\", \"*/\", \"\\\\newline\", \"@\", \"import\", \" \\\"\", \"ill\", \"ustr\", \"ations\", \"/\", \"ill\", \"ustr\", \"ations\", \"\\\";\", \"\\\\newline\", \"\\\\newline\", \"/*\", \"------------------------------------------------\", \"--------------\", \"\\\\newline\", \"#\", \" Font\", \"s\", \"\\\\newline\", \"------------------------------------------------\", \"--------------\", \"*/\", \"\\\\newline\", \"@\", \"import\", \" \\\"\", \"base\", \"/\", \"fonts\", \"\\\";\", \"\\\\newline\", \"\\\\newline\", \"/*\", \"------------------------------------------------\", \"--------------\", \"\\\\newline\", \"#\", \" Scroll\", \" reveal\", \"\\\\newline\", \"------------------------------------------------\", \"--------------\", \"*/\", \"\\n\", \"\\\\newline\", \"/**\", \"\\\\newline\", \" *\", \" But\", \"tons\", \"\\\\newline\", \" *\", \" ------------------------------------------------\", \"--\", \"\\\\newline\", \" */\", \"\\n\", \"<?\", \"php\", \"\\\\newline\", \"\\\\newline\", \"/**\", \"\\\\newline\", \" *\", \" @\", \"author\", \" L\", \"aj\", \"os\", \" M\", \"oln\", \"\\u00e1r\", \" <\", \"l\", \"ajax\", \".\", \"m\", \"@\", \"gmail\", \".\", \"com\", \">\", \"\\\\newline\", \" *\", \"\\\\newline\", \" *\", \" @\", \"since\", \" 1\", \".\", \"0\", \"\\\\newline\", \" */\", \"\\n\", \"package\", \" me\", \".\", \"c\", \"oley\", \".\", \"rec\", \"af\", \".\", \"ui\", \".\", \"controls\", \";\", \"\\\\newline\", \"\\\\newline\", \"import\", \" jav\", \"afx\", \".\", \"scene\", \".\", \"control\", \".\", \"TextField\", \";\", \"\\\\newline\", \"\\\\newline\", \"/**\", \"\\\\newline\", \" *\", \" Text\", \"Field\", \" that\", \" with\", \" a\", \" numeric\", \" text\", \" parse\", \".\", \"\\\\newline\", \" *\", \"\\\\newline\", \" *\", \" @\", \"author\", \" Matt\", \"\\\\newline\", \" */\", \"\\n\", \"/*\", \" Whole\", \" cell\", \" */\", \"\\\\newline\", \"div\", \".\", \"container\", \".\", \"cell\", \" {\", \"\\\\newline\", \"  \", \"padding\", \"-\", \"left\", \":\", \" 0\", \";\", \"\\\\newline\", \"  \", \"margin\", \"-\", \"bottom\", \":\", \" 1\", \"em\", \";\", \"\\\\newline\", \"}\", \"\\\\newline\", \"\\\\newline\", \"/*\", \" Rem\", \"oving\", \" all\", \" background\", \" formatting\", \" so\", \" we\", \" can\", \" control\", \" at\", \" the\", \" div\", \" level\", \" */\", \"\\n\", \"/*\", \"------------------------------------------------\", \"--------------\", \"\\\\newline\", \"#\", \" Illustr\", \"ations\", \"\\\\newline\", \"------------------------------------------------\", \"--------------\", \"*/\", \"\\\\newline\", \"@\", \"import\", \" \\\"\", \"ill\", \"ustr\", \"ations\", \"/\", \"ill\", \"ustr\", \"ations\", \"\\\";\", \"\\\\newline\", \"\\\\newline\", \"/*\", \"------------------------------------------------\", \"--------------\", \"\\\\newline\", \"#\", \" Font\", \"s\", \"\\\\newline\", \"------------------------------------------------\", \"--------------\", \"*/\", \"\\n\", \"/\", \"************************************************************************\", \"**\", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\\\newline\", \"/*\", \"  \", \"ft\", \"l\", \"cd\", \"fil\", \".\", \"h\", \"                        \", \"                        \", \"             \", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\\\newline\", \"/*\", \"    \", \"Free\", \"Type\", \" API\", \" for\", \" color\", \" filtering\", \" of\", \" sub\", \"pixel\", \" bitmap\", \" glyph\", \"s\", \"           \", \"*/\", \"\\\\newline\", \"/*\", \"    \", \"(\", \"spec\", \"ification\", \").\", \"                        \", \"                        \", \"     \", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\n\", \"/\", \"************************************************************************\", \"**\", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\\\newline\", \"/*\", \"  \", \"af\", \"script\", \".\", \"h\", \"                        \", \"                        \", \"             \", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\\\newline\", \"/*\", \"    \", \"Auto\", \"-\", \"f\", \"itter\", \" scripts\", \" (\", \"spec\", \"ification\", \" only\", \").\", \"                        \", \"    \", \"*/\", \"\\\\newline\", \"/*\", \"                        \", \"                        \", \"                        \", \" */\", \"\\\\newline\", \"/*\", \"  \", \"Copyright\", \" 2013\", \",\", \" 2014\", \" by\", \"                        \", \"                        \", \"*/\", \"\\n\"], \"activations\": [[[-0.2372136116027832]], [[-0.3872237205505371]], [[-0.09729862213134766]], [[-0.18926572799682617]], [[-0.21758508682250977]], [[-0.28051137924194336]], [[-3.0923824310302734]], [[0.0]], [[-0.22870731353759766]], [[-0.16398954391479492]], [[-0.1598963737487793]], [[-0.1598963737487793]], [[-0.3266901969909668]], [[0.03932046890258789]], [[-0.012575149536132812]], [[0.027554035186767578]], [[0.049040794372558594]], [[-0.017508506774902344]], [[-0.005494117736816406]], [[-0.01968669891357422]], [[-0.0036554336547851562]], [[-0.006130218505859375]], [[-0.006956577301025391]], [[-0.019054412841796875]], [[-0.023180007934570312]], [[0.004691600799560547]], [[-0.02298736572265625]], [[-0.0071125030517578125]], [[0.0028820037841796875]], [[0.010818004608154297]], [[-0.009761333465576172]], [[0.011501312255859375]], [[-0.01608753204345703]], [[-0.09807825088500977]], [[-0.020332813262939453]], [[-0.0021533966064453125]], [[0.013738155364990234]], [[0.01249837875366211]], [[-0.042151451110839844]], [[0.020166397094726562]], [[-0.025075435638427734]], [[-0.0013866424560546875]], [[-0.010878562927246094]], [[-0.04802560806274414]], [[0.032712459564208984]], [[0.025490760803222656]], [[0.0037136077880859375]], [[0.007121086120605469]], [[-0.011040210723876953]], [[0.015362739562988281]], [[0.004046916961669922]], [[-0.0011668205261230469]], [[-0.050380706787109375]], [[0.004319190979003906]], [[-0.01332235336303711]], [[-2.8609495162963867]], [[0.0]], [[0.026697635650634766]], [[-0.022768020629882812]], [[-0.027633190155029297]], [[0.027273178100585938]], [[-0.008931636810302734]], [[-0.02123737335205078]], [[0.007610797882080078]], [[0.026087284088134766]], [[-0.011678695678710938]], [[-0.014173030853271484]], [[0.0444636344909668]], [[0.013873100280761719]], [[0.04342794418334961]], [[0.052117347717285156]], [[0.0131378173828125]], [[0.01896190643310547]], [[0.013326644897460938]], [[0.016608238220214844]], [[0.010761260986328125]], [[0.01889657974243164]], [[0.014535903930664062]], [[0.017782211303710938]], [[-0.0011301040649414062]], [[0.004970073699951172]], [[0.004970073699951172]], [[0.08197832107543945]], [[0.03114175796508789]], [[0.013644695281982422]], [[0.020956039428710938]], [[0.019188404083251953]], [[0.020015716552734375]], [[0.03670835494995117]], [[0.024017810821533203]], [[0.019069671630859375]], [[0.01427459716796875]], [[0.03269243240356445]], [[-0.03614234924316406]], [[0.06516122817993164]], [[0.15571355819702148]], [[0.05195140838623047]], [[0.05002593994140625]], [[0.04923820495605469]], [[0.05022859573364258]], [[0.037380218505859375]], [[-0.08668184280395508]], [[-0.08668184280395508]], [[-0.1530308723449707]], [[0.08602094650268555]], [[0.06804656982421875]], [[0.09090852737426758]], [[0.09022188186645508]], [[0.015159130096435547]], [[-0.10294961929321289]], [[0.16591405868530273]], [[-0.355133056640625]], [[-0.18643426895141602]], [[-2.7662668228149414]], [[0.0]], [[-0.3477058410644531]], [[-0.018944263458251953]], [[0.11522483825683594]], [[-0.06500768661499023]], [[-0.09630680084228516]], [[-0.04928779602050781]], [[0.06325006484985352]], [[-0.1306605339050293]], [[-0.028600692749023438]], [[-0.07689523696899414]], [[-0.11216068267822266]], [[-2.79976224899292]], [[0.0]], [[-0.10047435760498047]], [[-0.2518434524536133]], [[-0.11389636993408203]], [[-0.11389636993408203]], [[-0.22957944869995117]], [[0.0594477653503418]], [[0.019587993621826172]], [[0.026968955993652344]], [[0.01721334457397461]], [[0.01706838607788086]], [[0.010630607604980469]], [[0.01243734359741211]], [[0.0074024200439453125]], [[0.00942373275756836]], [[0.008582592010498047]], [[0.021348953247070312]], [[0.008038997650146484]], [[0.031484127044677734]], [[0.0019745826721191406]], [[0.016613483428955078]], [[-0.007305145263671875]], [[0.0077266693115234375]], [[0.0041027069091796875]], [[-0.010097503662109375]], [[0.032061100006103516]], [[0.01636648178100586]], [[-0.016091346740722656]], [[0.05278730392456055]], [[-0.025311946868896484]], [[-0.08649158477783203]], [[-0.032965660095214844]], [[0.06369495391845703]], [[0.14094161987304688]], [[-0.012169837951660156]], [[-0.20694446563720703]], [[-2.799546718597412]], [[0.0]], [[0.04983329772949219]], [[-0.012958049774169922]], [[0.038774967193603516]], [[0.005253314971923828]], [[7.62939453125e-05]], [[0.007346153259277344]], [[0.0002713203430175781]], [[-0.0015721321105957031]], [[0.014334678649902344]], [[0.004598140716552734]], [[0.016025066375732422]], [[-0.013728141784667969]], [[-0.07593679428100586]], [[0.0044002532958984375]], [[0.0044002532958984375]], [[-0.012288093566894531]], [[0.012503623962402344]], [[-0.05254554748535156]], [[0.0018911361694335938]], [[-0.007264614105224609]], [[0.010599613189697266]], [[0.002525806427001953]], [[0.009715557098388672]], [[-0.02167034149169922]], [[0.008885860443115234]], [[-0.09709835052490234]], [[-0.09709835052490234]], [[-0.16826534271240234]], [[0.018863677978515625]], [[-0.006351470947265625]], [[-0.0025348663330078125]], [[-0.017663955688476562]], [[0.007350921630859375]], [[0.00041866302490234375]], [[0.017034053802490234]], [[-0.013866424560546875]], [[-0.016126632690429688]], [[-0.03627967834472656]], [[0.0026869773864746094]], [[0.0025997161865234375]], [[-0.025674819946289062]], [[0.02011394500732422]], [[-0.04631757736206055]], [[-0.12160539627075195]], [[-0.09202909469604492]], [[-0.03715658187866211]], [[-0.26839113235473633]], [[-2.7775516510009766]], [[0.0]], [[0.030696392059326172]], [[-0.015179157257080078]], [[0.005718708038330078]], [[-0.053209781646728516]], [[0.04460763931274414]], [[-0.010006904602050781]], [[-0.016101360321044922]], [[0.01403951644897461]], [[-0.006865978240966797]], [[0.02221202850341797]], [[0.043430328369140625]], [[-0.004390239715576172]], [[-0.0031080245971679688]], [[-0.013758182525634766]], [[0.010569572448730469]], [[0.016719341278076172]], [[-0.011393070220947266]], [[-0.0011248588562011719]], [[-0.00366973876953125]], [[0.006787300109863281]], [[-0.013402938842773438]], [[0.0214996337890625]], [[0.007419586181640625]], [[-0.003570079803466797]], [[-0.01827526092529297]], [[0.006971836090087891]], [[0.007213115692138672]], [[-0.004818916320800781]], [[-0.03656005859375]], [[-0.0553278923034668]], [[-0.0659489631652832]], [[-0.0659489631652832]], [[-0.2107405662536621]], [[-0.014651775360107422]], [[-0.011723995208740234]], [[-0.01129007339477539]], [[-0.03135204315185547]], [[0.01059865951538086]], [[-0.007594585418701172]], [[0.024596214294433594]], [[0.06019735336303711]], [[0.01757192611694336]], [[0.01398324966430664]], [[0.025381088256835938]], [[-0.08832836151123047]], [[-0.2004084587097168]], [[-2.743520736694336]], [[0.0]], [[0.09377479553222656]], [[-0.030366897583007812]], [[-0.04801654815673828]], [[0.0414586067199707]], [[-0.0022792816162109375]], [[-0.009770393371582031]], [[-0.00014352798461914062]], [[0.024213790893554688]], [[-0.016402721405029297]], [[-0.03902101516723633]], [[0.07795095443725586]], [[-0.02851724624633789]], [[-0.007449150085449219]], [[0.09435415267944336]], [[-0.0024394989013671875]], [[0.0012559890747070312]], [[-0.009944915771484375]], [[-0.007259845733642578]], [[-0.010433197021484375]], [[-0.003539562225341797]], [[-0.007734775543212891]], [[-0.010951042175292969]], [[-0.027644634246826172]], [[-0.19719648361206055]], [[-0.19719648361206055]], [[-0.21651887893676758]], [[0.03890419006347656]], [[0.02054119110107422]], [[0.03780651092529297]], [[0.05967569351196289]], [[-0.11993551254272461]], [[0.0340113639831543]], [[0.04583168029785156]], [[-0.44455623626708984]], [[-0.23096990585327148]], [[-2.732212543487549]], [[0.0]], [[0.008254051208496094]], [[-0.02056121826171875]], [[0.017024517059326172]], [[0.010628223419189453]], [[-0.007594585418701172]], [[0.03793907165527344]], [[0.00045490264892578125]], [[0.00045490264892578125]], [[0.00045490264892578125]], [[-0.008740901947021484]], [[0.04129171371459961]], [[0.011888504028320312]], [[0.005098819732666016]], [[0.00370025634765625]], [[0.013460636138916016]], [[0.005114078521728516]], [[0.007505893707275391]], [[0.008130073547363281]], [[0.015399456024169922]], [[0.01273488998413086]], [[0.01273488998413086]], [[0.0028171539306640625]], [[-0.007235527038574219]], [[0.010686874389648438]], [[0.027100086212158203]], [[0.003470897674560547]], [[0.003470897674560547]], [[0.003470897674560547]], [[-0.011684417724609375]], [[0.021345138549804688]], [[0.0030264854431152344]], [[0.00896596908569336]], [[-0.011166095733642578]], [[0.020849227905273438]], [[0.012741565704345703]], [[-0.00278472900390625]], [[0.016332626342773438]], [[0.011504173278808594]], [[0.005504131317138672]], [[0.02034139633178711]], [[0.0021677017211914062]], [[0.020639419555664062]], [[0.01779651641845703]], [[0.009258270263671875]], [[-0.005563259124755859]], [[-0.01293802261352539]], [[-0.09749269485473633]], [[-0.014903068542480469]], [[0.012433052062988281]], [[0.027652263641357422]], [[0.006275177001953125]], [[0.008165836334228516]], [[0.008441925048828125]], [[0.022690296173095703]], [[0.022690296173095703]], [[0.09439992904663086]], [[0.04812908172607422]], [[0.2124953269958496]], [[-0.1790599822998047]], [[0.05162382125854492]], [[0.05162382125854492]], [[0.05162382125854492]], [[-2.7298941612243652]], [[0.0]], [[0.0010819435119628906]], [[-0.005027294158935547]], [[0.01220560073852539]], [[-0.006892204284667969]], [[-0.03145742416381836]], [[0.010791301727294922]], [[-0.00261688232421875]], [[-0.00261688232421875]], [[-0.00261688232421875]], [[-0.018022537231445312]], [[0.005566120147705078]], [[0.013360023498535156]], [[-0.007070064544677734]], [[-0.0067310333251953125]], [[0.007720470428466797]], [[-0.0021924972534179688]], [[0.0032935142517089844]], [[0.005607128143310547]], [[0.005607128143310547]], [[-0.006026268005371094]], [[-0.004520416259765625]], [[-0.014636993408203125]], [[0.031235218048095703]], [[-0.0005016326904296875]], [[-0.0005016326904296875]], [[-0.0005016326904296875]], [[-0.01765155792236328]], [[0.008322715759277344]], [[0.038504600524902344]], [[0.005426883697509766]], [[0.009817123413085938]], [[0.00941610336303711]], [[0.021407604217529297]], [[0.014273643493652344]], [[0.02276325225830078]], [[0.054223060607910156]], [[0.01438283920288086]], [[0.009090423583984375]], [[0.018774032592773438]], [[-0.018291950225830078]], [[0.029141902923583984]], [[-0.025547027587890625]], [[-0.022520065307617188]], [[0.050405025482177734]], [[-0.018397808074951172]], [[-0.029057025909423828]], [[-0.029057025909423828]], [[-0.029057025909423828]], [[-0.042131900787353516]], [[0.15832948684692383]], [[-0.11135721206665039]], [[-0.019491195678710938]], [[0.011130809783935547]], [[-0.02320241928100586]], [[0.08505821228027344]], [[-0.06804323196411133]], [[-0.03176546096801758]], [[0.03958415985107422]], [[0.03958415985107422]], [[-2.7288570404052734]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7fe9d4130880>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ablate_text(text_list, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_264230/3773657976.py:19: UserWarning: torch.searchsorted(): input value tensor is non-contiguous, this will lower the performance due to extra data copy when converting non-contiguous tensor to contiguous, please use contiguous input value tensor if possible. This message will only appear once per program. (Triggered internally at /opt/conda/conda-bld/pytorch_1682343967769/work/aten/src/ATen/native/BucketizationUtils.h:33.)\n",
      "  bins = torch.bucketize(best_feature_activations, bin_boundaries)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-e693d263-b932\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-e693d263-b932\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"\\\"\", \"S\", \"ang\", \"re\", \" nue\", \"vo\", \",\", \" homes\", \".\\\"\", \" \\\"\", \"Police\", \".\\\"\", \" \\\"\", \"Hold\", \" it\", \" right\", \" there\", \".\\\"\", \" \\\"\", \" Hands\", \" up\", \".\\\"\", \" \\\"\", \"Again\", \"st\", \"\\n\", \"\\\"\", \"Thank\", \" you\", \",\", \" sir\", \".\\\"\", \" \\\"\", \"Next\", \".\\\"\", \" \\\"\", \"Good\", \"day\", \",\", \" Wallace\", \" R\", \"itch\", \"ie\", \"\\\"\", \" \\\"\", \"Pass\", \"port\", \",\", \" please\", \",\", \" sir\", \"\\n\", \"\\\"(\", \"BRE\", \"ATH\", \"ES\", \" D\", \"EE\", \"PL\", \"Y\", \")\\\"\", \" \\\"\", \"You\", \" deserve\", \" this\", \"...\\\"\", \" \\\"\", \"You\", \" do\", \".\\\"\", \" \\\"\", \"You\", \"'ve\", \" earned\", \" it\", \".\\\"\", \" \\\"(\", \"\\n\", \"\\\"[\", \" Horn\", \" Hon\", \"ks\", \" ]\\\"\", \" \\\"[\", \" All\", \" Sh\", \"outing\", \" ]\\\"\", \" \\\"[\", \" Bell\", \" Ring\", \"ing\", \" ]\\\"\", \" \\\"\\\"\", \"Upon\", \" recommendation\", \" of\", \" the\", \" Business\", \" Conduct\", \" Committee\", \",\", \" the\", \"\\n\", \"\\\"\", \"Anything\", \" goes\", \"\\\"\", \" \\\"\", \"anything\", \" goes\", \"\\\"\", \" \\\"\", \"Anything\", \" goes\", \".\\\"\", \" \\\"\", \"Be\", \" careful\", \".\\\"\", \" \\\"\", \"You\", \" never\", \" told\", \" me\", \" you\", \" spoke\", \" my\", \" language\", \"\\n\", \"\\\"[\", \" Horn\", \" Hon\", \"ks\", \" ]\\\"\", \" \\\"[\", \" All\", \" Sh\", \"outing\", \" ]\\\"\", \" \\\"[\", \" Bell\", \" Ring\", \"ing\", \" ]\\\"\", \" \\\"\\\"\", \"Upon\", \" recommendation\", \" of\", \" the\", \" Business\", \" Conduct\", \" Committee\", \",\", \" the\", \"\\n\", \"\\\"\", \"SH\", \"IP\", \"'\", \"S\", \" H\", \"ORN\", \" BL\", \"OWS\", \"\\\"\", \" \\\"\", \" Did\", \" that\", \" man\", \" bring\", \" you\", \" here\", \"?\\\"\", \" \\\"\", \" Yes\", \".\\\"\", \" \\\"\", \"Why\", \" did\", \" he\", \"\\n\", \"\\u2018\", \"Well\", \",\", \" this\", \" is\", \" weird\", \",\", \" isn\", \"\\u2019\", \"t\", \" it\", \"?\\u201d\", \" says\", \" Dam\", \"on\", \" Alb\", \"arn\", \".\", \" Six\", \" days\", \" ago\", \",\", \" he\", \" was\", \" in\", \"\\n\", \"Q\", \":\", \"\\\\newline\", \"\\\\newline\", \"Regex\", \" to\", \" match\", \" \\\"\", \"a\", \" string\", \" of\", \" length\", \" less\", \" than\", \" X\", \" resides\", \" between\", \" two\", \" \\\"\", \">\\\"\", \" symbols\", \"\\\"\", \"\\\\newline\", \"\\\\newline\", \"The\", \"\\n\", \"Health\", \" Information\", \"\\\\newline\", \"\\\\newline\", \"All\", \" health\", \" information\", \" obtained\", \" by\", \" the\", \" Doctors\", \" and\", \" staff\", \" at\", \" the\", \" medical\", \" centre\", \" during\", \" your\", \" care\", \" is\", \" confidential\", \".\", \" Sometimes\", \" relevant\", \"\\n\"], \"activations\": [[[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[10.673803329467773]], [[1.162277340888977]], [[0.0]], [[39.795963287353516]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[44.06084060668945]], [[0.0]], [[0.0]], [[0.0]], [[42.8826904296875]], [[0.3617529273033142]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[7.866379737854004]], [[0.0]], [[0.0]], [[40.532100677490234]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[29.58195686340332]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[17.690279006958008]], [[0.019319534301757812]], [[0.0]], [[0.0]], [[0.0]], [[35.10803985595703]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.5644187927246094]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[42.94010543823242]], [[0.6585206985473633]], [[0.0]], [[0.0]], [[0.0]], [[1.53135085105896]], [[0.0]], [[16.261240005493164]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[27.546958923339844]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[26.78229331970215]], [[7.142005443572998]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[8.171319961547852]], [[0.979217529296875]], [[0.6952893137931824]], [[0.6228770613670349]], [[25.33113670349121]], [[0.0]], [[0.3607028126716614]], [[0.021893098950386047]], [[0.0]], [[1.6589422225952148]], [[0.0]], [[0.0]], [[39.27996826171875]], [[0.1773543357849121]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.53135085105896]], [[0.0]], [[16.261240005493164]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[27.546958923339844]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[26.78229331970215]], [[7.142005443572998]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[2.4833714962005615]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[10.12811279296875]], [[1.4383163452148438]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[39.1783447265625]], [[2.66455078125]], [[0.0]], [[0.0]], [[0.8016926050186157]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.1904075145721436]], [[1.49708890914917]], [[0.8258324861526489]], [[0.0]], [[0.0]], [[1.0351523160934448]], [[5.1469526290893555]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.1535007357597351]], [[2.275033473968506]], [[0.25275689363479614]], [[0.0]], [[1.0795336961746216]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.170217826962471]], [[0.10434526205062866]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f7b13431150>"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Instead of top-k examples, just random samples from non-zero values\n",
    "text_list, full_text, _, _ = get_feature_datapoints(best_feature, dictionary_activations, dataset, setting=\"uniform\", k=10)\n",
    "visualize_text(full_text, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-03818966-0fcc\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-03818966-0fcc\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"Max\", \" Meyer\", \"\\u2019\", \"s\", \" search\", \" for\", \" a\", \" big\", \"-\", \"money\", \" move\", \" goes\", \" on\", \"\\n\", \"What\", \" is\", \" really\", \" going\", \" on\", \"\\n\", \".\", \"\\\\newline\", \"\\\\newline\", \".\", \"\\\\newline\", \"\\\\newline\", \"Female\", \" fans\", \" normally\", \" know\", \" more\", \" facts\", \" about\", \" what\", \"\\u2019\", \"s\", \" going\", \" on\", \"\\n\", \"The\", \" moder\", \"ators\", \" were\", \" alerted\", \" that\", \" something\", \" was\", \" going\", \" on\", \"\\n\", \"Know\", \" that\", \" feeling\", \"?\", \"\\\\newline\", \"\\\\newline\", \"To\", \" cancel\", \" your\", \" Yellow\", \" Pages\", \" delivery\", \":\", \"\\\\newline\", \"\\\\newline\", \"1\", \"-\", \" Go\", \" on\", \"\\n\", \"Q\", \":\", \"\\\\newline\", \"\\\\newline\", \"convert\", \" Buf\", \"fered\", \"Image\", \" to\", \" J\", \"PG\", \" byte\", \" array\", \"\\\\newline\", \"\\\\newline\", \"I\", \"'m\", \" working\", \" on\", \"\\n\", \"Q\", \":\", \"\\\\newline\", \"\\\\newline\", \"Pop\", \"up\", \" window\", \" link\", \" launching\", \" in\", \" window\", \" as\", \" well\", \" as\", \" in\", \" the\", \" browser\", \" tab\", \"\\\\newline\", \"\\\\newline\", \"I\", \"'m\", \" working\", \" on\", \"\\n\", \"Q\", \":\", \"\\\\newline\", \"\\\\newline\", \"Should\", \" I\", \" provide\", \" login\", \" functionality\", \" in\", \" mobile\", \" version\", \"?\", \"\\\\newline\", \"\\\\newline\", \"I\", \" am\", \" working\", \" on\", \"\\n\", \"Q\", \":\", \"\\\\newline\", \"\\\\newline\", \"Change\", \" element\", \" content\", \" with\", \" onClick\", \" in\", \" React\", \"\\\\newline\", \"\\\\newline\", \"In\", \" my\", \"\\n\", \"Sub\", \":\", \" Sub\", \"mission\", \" of\", \" resolution\", \" passed\", \" by\", \" 11\", \"th\", \"\\\\newline\", \"Federal\", \" Council\", \" of\", \" NF\", \"PE\", \" at\", \"\\\\newline\", \"\\\\newline\", \"Math\", \"ura\", \" (\", \"UP\", \")\", \" from\", \"\\n\"], \"activations\": [[[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[6.839892864227295]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[6.1896772384643555]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[5.580307960510254]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.942320823669434]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[4.118806838989258]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[2.2337710857391357]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.415531873703003]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.0614545345306396]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.3302841782569885]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f6697c0d660>"
      ]
     },
     "execution_count": 452,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visualize_text(text_list, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[token]\n",
      "Top-20 increasing: ['ה', '\\n\\t', '\\n\\t\\t\\t\\t\\t\\t', 'gg', '\\\\\\\\\\\\\\\\', 'AAAAAAAAAAAAAAAA', '’', 'ffffffff', '\\t\\t\\t\\t\\t', '/', \"'\", '1', '.', '&', '0', '\"', '(', '2', '<|padding|>', '#']\n",
      "Top-20 increasing: ['1.44', '1.28', '1.13', '0.85', '0.85', '0.76', '0.45', '0.13', '0.11', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Top-20 decreasing: ['1', ')', '#', '/', '+', \"'\", '2', '<|padding|>', '*', '$', '.', ',', '&', '0', '\"', '(', '<|endoftext|>', '!', '%', '-']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 50295\n",
      "ה[token]\n",
      "Top-20 increasing: ['NdEx', '而', ' elif', ' Bav', ' Xbox', ' καὶ', ' \\\\[[', '及', 'Qaeda', ' Wes', ' Ã', ' Zach', 'FTA', '#{$', ' Dell', '\\n\\n ', 'ً', ' BMW', ' Sask', 'aupt']\n",
      "Top-20 increasing: ['3.66', '3.13', '2.99', '2.61', '2.32', '2.30', '2.25', '2.19', '2.17', '2.14', '2.13', '2.11', '2.05', '2.03', '1.97', '1.96', '1.93', '1.90', '1.89', '1.89']\n",
      "Top-20 decreasing: ['1', ')', '#', '/', '+', \"'\", '2', '<|padding|>', '*', '$', '.', ',', '&', '0', '\"', '(', '<|endoftext|>', '!', '%', '-']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 48427\n",
      "הNdEx[token]\n",
      "Top-20 increasing: [' �', ' �', ' �', ' �', ' �', ' �', ' �', '){#', '+\"', '`,`', ' AND', ' &&', ' >=', 'erdinand', ' א', 'And', ' �', ' {\"', ' &#', '*,*']\n",
      "Top-20 increasing: ['5.55', '5.53', '5.45', '5.20', '5.19', '5.01', '4.87', '4.79', '4.77', '4.59', '4.32', '4.31', '4.29', '4.21', '4.12', '4.10', '4.06', '4.04', '4.04', '4.04']\n",
      "Top-20 decreasing: ['p', '8', '�', '�', 'n', '�', ':', '�', 'i', '�', '�', '�', '�', 't', '�', 'o', '�', '�', '�', '�']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 20729\n"
     ]
    }
   ],
   "source": [
    "def prepend_all_tokens_and_get_feature_activation(model, minimal_activating_example, feature, setting=\"prepend\"):\n",
    "    tokens = model.to_tokens(minimal_activating_example, prepend_bos=False)\n",
    "\n",
    "    # Run through every number up to vocab size\n",
    "    vocab_size = model.cfg.d_vocab\n",
    "    batch_size = 256 # Define your desired batch size\n",
    "\n",
    "    dollar_feature_activations = torch.zeros(vocab_size)\n",
    "    for start in range(0, vocab_size, batch_size):\n",
    "        end = min(start + batch_size, vocab_size)\n",
    "\n",
    "        token_prep = torch.arange(start, end).to(device)\n",
    "        token_prep = token_prep.unsqueeze(1)  # Add a dimension for concatenation\n",
    "\n",
    "        # 1. Prepend to the tokens\n",
    "        if setting == \"prepend\":\n",
    "            tokens_catted = torch.cat((token_prep, tokens.repeat(end - start, 1)), dim=1).long()\n",
    "        elif setting == \"append\":\n",
    "            tokens_catted = torch.cat((tokens.repeat(end - start, 1), token_prep), dim=1).long()\n",
    "        else:\n",
    "            raise ValueError(f\"Unknown setting: {setting}\")\n",
    "\n",
    "        # 2. Run through the model\n",
    "        with torch.no_grad():\n",
    "            _, cache = model.run_with_cache(tokens_catted.to(device))\n",
    "            neuron_act_batch = cache[cache_name]\n",
    "            _, act = smaller_auto_encoder(neuron_act_batch)\n",
    "\n",
    "        # 3. Get the feature\n",
    "        dollar_feature_activations[start:end] = act[:, -1, feature].cpu().squeeze()\n",
    "\n",
    "    k = 20\n",
    "    k_increasing_val, k_increasing_ind = dollar_feature_activations.topk(k)\n",
    "    k_decreasing_val, k_decreasing_ind = dollar_feature_activations.topk(k, largest=False)\n",
    "    if(setting == \"prepend\"):\n",
    "        print(f\"[token]{minimal_activating_example}\")\n",
    "    elif(setting == \"append\"):\n",
    "        print(f\"{minimal_activating_example}[token]\")\n",
    "    else:\n",
    "        raise ValueError(f\"Unknown setting: {setting}\")\n",
    "    # Print indices converted to tokens\n",
    "    print(f\"Top-{k} increasing: {model.to_str_tokens(k_increasing_ind)}\")\n",
    "    # Print values\n",
    "    print(f\"Top-{k} increasing: {[f'{val:.2f}' for val in k_increasing_val]}\")\n",
    "    print(f\"Top-{k} decreasing: {model.to_str_tokens(k_decreasing_ind)}\")\n",
    "    print(f\"Top-{k} decreasing: {[f'{val:.2f}' for val in k_decreasing_val]}\")\n",
    "    print(f\"Number of 0 activations: {torch.sum(dollar_feature_activations == 0)}\")\n",
    "    if(setting == \"prepend\"):\n",
    "        best_text = \"\".join(model.to_str_tokens(dollar_feature_activations.argmax()) + [minimal_activating_example])\n",
    "    else:\n",
    "        best_text = \"\".join([minimal_activating_example] + model.to_str_tokens(dollar_feature_activations.argmax()))\n",
    "    return best_text\n",
    "\n",
    "best_text = \"\"\n",
    "for x in range(3):\n",
    "    # best_text = prepend_all_tokens_and_get_feature_activation(model, best_text, best_feature, setting=\"prepend\")\n",
    "    best_text = prepend_all_tokens_and_get_feature_activation(model, best_text, best_feature, setting=\"append\")\n",
    "# prepend_all_tokens_and_get_feature_activation(model, \" for all $\", best_feature, setting=\"prepend\")\n",
    "# prepend_all_tokens_and_get_feature_activation(model, \" tree\", best_feature, setting=\"prepend\")\n",
    "# prepend_all_tokens_and_get_feature_activation(model, \" tree\", best_feature, setting=\"append\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[token],\n",
      "Top-20 increasing: [' radiological', ' neurological', ' dopaminergic', ' diastolic', ' respiratory', ' vitamins', ' cardiovascular', ' renal', ' economic', ' morbidity', ' radiographic', 'economic', ' ventricular', ' hemodynamic', ' pulmonary', ' economical', ' tibial', ' gender', ' biochemical', ' analges']\n",
      "Top-20 increasing: ['4.46', '4.36', '4.00', '3.94', '3.61', '3.54', '3.50', '3.45', '3.39', '3.33', '3.19', '3.16', '3.14', '3.14', '3.12', '3.11', '3.10', '3.06', '3.06', '3.05']\n",
      "Top-20 decreasing: ['1', '#', '<|padding|>', '/', '$', \"'\", '2', '4', '!', '<|endoftext|>', '.', ',', '&', '0', '\"', '(', '5', '3', '%', '-']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 40539\n",
      "[token] radiological,\n",
      "Top-20 increasing: [',', '~,', '),', '+,', ')),', '\"}),', '**),', '*),', '°,', '.),', ' ),', '^),', ']),', '],', '~),', '*,', ' *,', '-,', '\"),', '++,']\n",
      "Top-20 increasing: ['8.89', '7.53', '7.36', '7.20', '7.18', '7.16', '7.13', '7.13', '7.10', '7.05', '7.04', '7.00', '6.94', '6.94', '6.93', '6.88', '6.83', '6.83', '6.82', '6.70']\n",
      "Top-20 decreasing: ['1', '#', 'L', '\"', '$', 'F', '>', 'O', '<', '=', '@', 'E', 'G', '0', 'K', 'I', 'Q', 'N', 'M', 'C']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 26841\n",
      "[token], radiological,\n",
      "Top-20 increasing: [' sequenced', ' pathologic', ' analog', ' intraoperative', ' Schematic', ' robotic', ' preclinical', ' histologic', ' digital', ' neural', ' immunohistochemical', ' cortical', ' preoperative', ' endoscopic', ' Bayesian', ' schematic', ' immunoblot', ' prenatal', ' hippocampal', ' genomic']\n",
      "Top-20 increasing: ['11.00', '10.69', '10.67', '10.66', '10.64', '10.62', '10.59', '10.52', '10.50', '10.50', '10.47', '10.45', '10.39', '10.38', '10.37', '10.36', '10.35', '10.35', '10.35', '10.34']\n",
      "Top-20 decreasing: ['{\\\\', ' \\\\[', ' And', '_{\\\\', 'We', \"'m\", '[@', \"'re\", '\\x00', 'What', '{', '(\\\\', 'You', ' what', '\\\\[', ' [@', ' something', ' You', ' say', ' how']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 620\n"
     ]
    }
   ],
   "source": [
    "best_text = \",\"\n",
    "for x in range(3):\n",
    "    best_text = prepend_all_tokens_and_get_feature_activation(model, best_text, best_feature, setting=\"prepend\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[token] x\n",
      "Top-20 increasing: ['1', ')', '#', '/', '+', \"'\", '2', '<|padding|>', '*', '$', '.', ',', '&', '0', '\"', '(', '<|endoftext|>', '!', '%', '-']\n",
      "Top-20 increasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Top-20 decreasing: ['1', ')', '#', '/', '+', \"'\", '2', '<|padding|>', '*', '$', '.', ',', '&', '0', '\"', '(', '<|endoftext|>', '!', '%', '-']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 50304\n",
      " let[token]\n",
      "Top-20 increasing: [' Just', '#', '1', ')', '/', \"'\", '2', '<|padding|>', '$', '*', '+', '.', '&', '0', '\"', '(', ',', '<|endoftext|>', '!', '%']\n",
      "Top-20 increasing: ['0.31', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Top-20 decreasing: ['1', ')', '#', '/', '+', \"'\", '2', '<|padding|>', '*', '$', '.', ',', '&', '0', '\"', '(', '<|endoftext|>', '!', '%', '-']\n",
      "Top-20 decreasing: ['0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00']\n",
      "Number of 0 activations: 50303\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "' let Just'"
      ]
     },
     "execution_count": 455,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prepend_all_tokens_and_get_feature_activation(model, \" x\", best_feature, setting=\"prepend\")\n",
    "prepend_all_tokens_and_get_feature_activation(model, \" let\", best_feature, setting=\"append\")\n",
    "# prepend_all_tokens_and_get_feature_activation(model, \" tree\", best_feature, setting=\"append\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-f549d31a-ccad\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-f549d31a-ccad\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"The\", \" picture\", \" is\", \" as\", \" clear\", \" as\", \" black\", \" and\", \" white\", \".\", \"\\n\", \"Could\", \" you\", \" pass\", \" the\", \" salt\", \" and\", \" pepper\", \",\", \" please\", \"?\", \"\\n\", \"This\", \" job\", \" is\", \" our\", \" bread\", \" and\", \" butter\", \",\", \" we\", \" can\", \"'t\", \" afford\", \" to\", \" lose\", \" it\", \".\", \"\\n\", \"We\", \" need\", \" to\", \" consider\", \" the\", \" pros\", \" and\", \" cons\", \" before\", \" making\", \" a\", \" decision\", \".\", \"\\n\", \"It\", \"'s\", \" a\", \" process\", \" of\", \" trial\", \" and\", \" error\", \" until\", \" we\", \" find\", \" the\", \" right\", \" solution\", \".\", \"\\n\", \"When\", \" you\", \" flip\", \" a\", \" coin\", \",\", \" do\", \" you\", \" choose\", \" heads\", \" or\", \" tails\", \"?\", \"\\n\", \"We\", \" have\", \" to\", \" act\", \" fast\", \",\", \" it\", \"'s\", \" now\", \" or\", \" never\", \".\", \"\\n\", \"The\", \" concert\", \" was\", \" a\", \" mix\", \" of\", \" jazz\", \" and\", \" rock\", \" and\", \" roll\", \".\", \"\\n\", \"In\", \" England\", \",\", \" it\", \"'s\", \" traditional\", \" to\", \" have\", \" fish\", \" and\", \" chips\", \" on\", \" Fr\", \"idays\", \".\", \"\\n\", \"The\", \" bride\", \" and\", \" groom\", \" looked\", \" absolutely\", \" stunning\", \".\", \"\\n\"], \"activations\": [[[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.536856770515442]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.5876532793045044]], [[0.8130170106887817]], [[0.24985647201538086]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[1.5863672494888306]], [[0.0]], [[0.0]], [[0.4383917450904846]], [[0.0]], [[0.10962831974029541]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[3.679352283477783]], [[0.0]], [[0.0]], [[1.1356912851333618]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[2.277104377746582]], [[0.0]], [[0.0]], [[0.26912742853164673]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.3796156644821167]], [[0.0]], [[4.53075647354126]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.27334392070770264]], [[0.0]], [[6.839254379272461]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.5259067416191101]], [[0.0]], [[0.0]], [[0.0]], [[0.6951066255569458]], [[0.0]], [[0.0]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f41902f8220>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text_list = [\n",
    "    \" $\",\n",
    "    \" for $\",\n",
    "    \" integral $\",\n",
    "    \" hey $\",\n",
    "    \" integral for $\",\n",
    "    \" sold for $\",\n",
    "    \" for all $\",\n",
    "    \" sold for all $\",\n",
    "    \" profit for all $\",\n",
    "    \" \\n for all $\",\n",
    "    \" {] for all $\",\n",
    "]\n",
    "text_list = [\n",
    "    \" The bugs and trees went up. The bugs\",\n",
    "    \" The bugs, bees, and trees went up. The bugs, bees,\",\n",
    "    \" The bugs, bees, and trees went up. The bugs, bees, and trees went down. The bugs, bees,\",\n",
    "    \" He counted 1, 2, 3!\",\n",
    "    \" He counted 1, 2, 3!\",\n",
    "]\n",
    "text_list = [\n",
    "    \"The picture is as clear as black and white.\",\n",
    "    \"Could you pass the salt and pepper, please?\",\n",
    "    \"This job is our bread and butter, we can't afford to lose it.\",\n",
    "    \"We need to consider the pros and cons before making a decision.\",\n",
    "    \"It's a process of trial and error until we find the right solution.\",\n",
    "    \"When you flip a coin, do you choose heads or tails?\",\n",
    "    \"We have to act fast, it's now or never.\",\n",
    "    \"The concert was a mix of jazz and rock and roll.\",\n",
    "    \"In England, it's traditional to have fish and chips on Fridays.\",\n",
    "    \"The bride and groom looked absolutely stunning.\",\n",
    "]\n",
    "\n",
    "visualize_text(text_list, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div id=\"circuits-vis-199302e7-dd80\" style=\"margin: 15px 0;\"/>\n",
       "    <script crossorigin type=\"module\">\n",
       "    import { render, TextNeuronActivations } from \"https://unpkg.com/circuitsvis@1.40.0/dist/cdn/esm.js\";\n",
       "    render(\n",
       "      \"circuits-vis-199302e7-dd80\",\n",
       "      TextNeuronActivations,\n",
       "      {\"tokens\": [\"The\", \" picture\", \" is\", \" as\", \" clear\", \" as\", \" black\", \" and\", \" white\", \".\", \"\\n\", \"Could\", \" you\", \" pass\", \" the\", \" salt\", \" and\", \" pepper\", \",\", \" please\", \"?\", \"\\n\", \"This\", \" job\", \" is\", \" our\", \" bread\", \" and\", \" butter\", \",\", \" we\", \" can\", \"'t\", \" afford\", \" to\", \" lose\", \" it\", \".\", \"\\n\", \"We\", \" need\", \" to\", \" consider\", \" the\", \" pros\", \" and\", \" cons\", \" before\", \" making\", \" a\", \" decision\", \".\", \"\\n\", \"It\", \"'s\", \" a\", \" process\", \" of\", \" trial\", \" and\", \" error\", \" until\", \" we\", \" find\", \" the\", \" right\", \" solution\", \".\", \"\\n\", \"When\", \" you\", \" flip\", \" a\", \" coin\", \",\", \" do\", \" you\", \" choose\", \" heads\", \" or\", \" tails\", \"?\", \"\\n\", \"We\", \" have\", \" to\", \" act\", \" fast\", \",\", \" it\", \"'s\", \" now\", \" or\", \" never\", \".\", \"\\n\", \"The\", \" concert\", \" was\", \" a\", \" mix\", \" of\", \" jazz\", \" and\", \" rock\", \" and\", \" roll\", \".\", \"\\n\", \"In\", \" England\", \",\", \" it\", \"'s\", \" traditional\", \" to\", \" have\", \" fish\", \" and\", \" chips\", \" on\", \" Fr\", \"idays\", \".\", \"\\n\", \"The\", \" bride\", \" and\", \" groom\", \" looked\", \" absolutely\", \" stunning\", \".\", \"\\n\"], \"activations\": [[[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.24985647201538086]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.6443923711776733]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.288238525390625]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]], [[0.0]]], \"firstDimensionName\": \"Layer\", \"secondDimensionName\": \"Neuron\"}\n",
       "    )\n",
       "    </script>"
      ],
      "text/plain": [
       "<circuitsvis.utils.render.RenderedHTML at 0x7f4168572da0>"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ablate_text(text_list, best_feature, model, setting=\"plot\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Beyond the first token, this doesn't fit within the hypothesis, though may be OOD. A check (for the future) would be to constrain by the model's next word prediction (and maybe do direct soft prompts)."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Comparing to the Neuron Basis\n",
    "Does this feature net us anything over using the normal neuron basis? If this is only learning a monosemantic feature, then that's pretty lame! \n",
    "\n",
    "We can first check how many neurons activate above a threshold for the top-10 feature activating examples (ie a neuron must activate above threshold for all 10 examples)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Threshold: 0.0, Neurons activated: 1205\n",
      "Threshold: 0.1, Neurons activated: 1172\n",
      "Threshold: 0.2, Neurons activated: 1154\n",
      "Threshold: 0.3, Neurons activated: 1132\n",
      "Threshold: 0.4, Neurons activated: 1098\n",
      "Threshold: 0.5, Neurons activated: 1073\n",
      "Threshold: 0.6, Neurons activated: 1047\n",
      "Threshold: 0.7, Neurons activated: 1009\n",
      "Threshold: 0.8, Neurons activated: 985\n",
      "Threshold: 0.9, Neurons activated: 964\n",
      "Threshold: 1.0, Neurons activated: 931\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Neurons that fire for this feature\n",
    "# Find corresponding neurons activations between pythia & autoencoder\n",
    "# Get the activations for the best dict features\n",
    "len_threshold = 11\n",
    "thresholds = [round(0.1*x,1) for x in range(len_threshold)]\n",
    "current_activated_neurons = np.zeros(len_threshold)\n",
    "for idx, threshold in enumerate(thresholds):\n",
    "    best_feature_activations = dictionary_activations[:, best_feature]\n",
    "    # Sort the features by activation, get the indices\n",
    "    nonzero_indices = torch.argsort(best_feature_activations, descending=True)\n",
    "    sorted_indices = nonzero_indices[:10]\n",
    "    t = (neuron_activations[sorted_indices, :] > threshold)\n",
    "    # And across the first dim)\n",
    "    t = t.all(dim=0)\n",
    "    neurons_activated = t.sum()\n",
    "    current_activated_neurons[idx] = neurons_activated\n",
    "    print(f\"Threshold: {threshold}, Neurons activated: {neurons_activated}\")\n",
    "# Plot boxplot w/ plotly\n",
    "plt.scatter(thresholds, current_activated_neurons)\n",
    "plt.xticks(rotation=45)\n",
    "plt.xlabel(\"Threshold\")\n",
    "plt.ylabel(\"Number of neurons activated\")\n",
    "plt.title(\"Features/Neurons activated\")\n",
    "# plt.ylim(0, 10)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notably it's a lot of neurons for above 0, but then goes to 3 for 0.5. However, we don't really know the statistics of neuron activations. Maybe some neuron's entire range is very tiny? So, we can see how many neurons are above a threshold determined by that neuron's quantiles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quantile: 0.0, Neurons activated: 2048\n",
      "Quantile: 0.1, Neurons activated: 2042\n",
      "Quantile: 0.2, Neurons activated: 2002\n",
      "Quantile: 0.3, Neurons activated: 1904\n",
      "Quantile: 0.4, Neurons activated: 1787\n",
      "Quantile: 0.5, Neurons activated: 1656\n",
      "Quantile: 0.6, Neurons activated: 1520\n",
      "Quantile: 0.7, Neurons activated: 1366\n",
      "Quantile: 0.8, Neurons activated: 1160\n",
      "Quantile: 0.9, Neurons activated: 845\n",
      "Quantile: 0.99, Neurons activated: 93\n"
     ]
    },
    {
     "data": {
      "image/png": "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jrhdo0YN8c8KhQLBwcGQyWQ4fvw4MjIyMGzYMJiZmWHevHk6vR4iIiKqnCSCIAj6DqK87t69CycnJxw5cgQdO3YE8LSHyMfHB0uWLCnzO3/88Qd69eqF27dvw9nZGQCwcuVKzJgxA3fv3oW5uXmp7xQUFKCgoEDczs3NhZubG+RyOWxtbTV/YURERKRxubm5kEql5bp/V+pHZs+Ty+UAAHt7e5XyjRs3olatWvD29kZYWBgeP34s7ouPj0fTpk3FZAgAAgMDkZubi/Pnz5d5nsjISEilUvHj5uamhashIiKiyqJSPzJ7llKpxOTJk9GuXTt4e3uL5YMHD4aHhwdcXV2RmJiIGTNmICUlBdu2bQMAZGZmqiRDAMTtzMzMMs8VFhaGqVOnitslPURERERUNRlMQhQaGoqkpCT89ddfKuVjx44V/9y0aVO4uLiga9euSE1NRb169Sp0LgsLC1hYWLxWvERERGQ4DOKR2fjx47Fr1y4cOnQItWvXfmldPz8/AMCVK1cAADKZDHfu3FGpU7Itk8m0EC0REREZmkqdEAmCgPHjx2P79u04ePAgPD09X/mdhIQEAICLiwsAwN/fH+fOnUNWVpZYJzY2Fra2tvDy8tJK3ERERGRYKvUjs9DQUGzatAk7duyAjY2NOOZHKpWievXqSE1NxaZNm9CzZ084ODggMTERU6ZMQceOHdGsWTMAQEBAALy8vDB06FBERUUhMzMTX375JUJDQ/lYjIiIiABU8mn3EomkzPK1a9dixIgRuHHjBoYMGYKkpCQ8evQIbm5ueO+99/Dll1+qTK+7fv06xo0bh8OHD8PKygrDhw/H/PnzUa1a+fJBdabtERERUeWgzv27UidElQUTIiIiIsNTZdchIiIiItIGJkRERERk9JgQERERkdFjQkRERERGjwkRERERGT0mRERERGT0mBARERGR0WNCREREREaPCREREREZPSZEREREZPSYEBEREZHRY0JERERERo8JERERERk9JkRERERk9KrpOwAiIiIyXgqlgBNp2cjKy4eTjSVae9rD1ESi8ziYEBEREZFe7E3KQERMMjLk+WKZi9QS4b290MPbRaex8JEZERER6dzepAyM23BaJRkCgEx5PsZtOI29SRk6jYcJEREREemUQikgIiYZQhn7SsoiYpKhUJZVQzuYEBEREZFOnUjLLtUz9CwBQIY8HyfSsnUWExMiIiIi0qmsvBcnQxWppwlMiIiIiEinnGwsNVpPE5gQERERkU619rSHi9QSL5pcL8HT2WatPe11FhMTIiIiItIpUxMJwnt7AUCppKhkO7y3l07XI2JCRERERDrXw9sFK4b4QiZVfSwmk1pixRBfna9DxIUZiYiISC96eLugu5eMK1UTERGRcTM1kcC/noO+w+AjMyIiIiImRERERGT0mBARERGR0WNCREREREaPCREREREZPSZEREREZPSMKiFavnw56tSpA0tLS/j5+eHEiRP6DomIiIgqAaNJiLZs2YKpU6ciPDwcp0+fRvPmzREYGIisrCx9h0ZERER6JhEEQdB3ELrg5+eHVq1a4fvvvwcAKJVKuLm5YcKECfjss89U6hYUFKCgoEDczs3NhZubG+RyOWxtbXUaNxEREVVMbm4upFJpue7fRrFSdWFhIU6dOoWwsDCxzMTEBN26dUN8fHyp+pGRkYiIiChVnpubq9U4iYiISHNK7tvl6fsxioTo3r17UCgUcHZ2Vil3dnbGxYsXS9UPCwvD1KlTxe1bt27By8sLbm5uWo+ViIiINCsvLw9SqfSldYwiIVKXhYUFLCwsxG1ra2vcuHEDNjY2kEg0+8K5ksdxN27c4OM4LWNb6w7bWnfY1rrDttYdTbW1IAjIy8uDq6vrK+saRUJUq1YtmJqa4s6dOyrld+7cgUwme+X3TUxMULt2bW2FBwCwtbXl/2A6wrbWHba17rCtdYdtrTuaaOtX9QyVMIpZZubm5mjRogXi4uLEMqVSibi4OPj7++sxMiIiIqoMjKKHCACmTp2K4cOHo2XLlmjdujWWLFmCR48eYeTIkfoOjYiIiPTMaBKiDz74AHfv3sWsWbOQmZkJHx8f7N27t9RAa12zsLBAeHi4ypgl0g62te6wrXWHba07bGvd0UdbG806REREREQvYhRjiIiIiIhehgkRERERGT0mRERERGT0mBARERGR0WNCREREREaPCREREREZPSZElRRXQ6CqoKCgQPwzf6e1KysrC6mpqfoOwyg8/7usVCr1FAlpEhOiSuDmzZvYt28ftm7diuvXrwMAJBIJ/yfTgjt37uDUqVOIjY3F48eP9R1OlZacnIx+/fqJr8yRSCRMirQkMTERHTp0wL59+3D37l19h1OlXb58Gf/5z3/wySefICoqCsDT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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "len_threshold = 11\n",
    "thresholds = [round(0.1 * x, 1) for x in range(len_threshold)]\n",
    "thresholds[-1] = 0.99\n",
    "current_activated_neurons = np.zeros(len_threshold)\n",
    "\n",
    "# Find corresponding neurons activations between pythia & autoencoder\n",
    "best_feature_activations = dictionary_activations[:, best_feature]\n",
    "\n",
    "# Sort the features by activation and get the indices\n",
    "nonzero_indices = torch.argsort(best_feature_activations, descending=True)\n",
    "sorted_indices = nonzero_indices[:11]\n",
    "\n",
    "neuron_test = neuron_activations[:50000, :]\n",
    "neuron_test = neuron_test.to(device)\n",
    "thresholds_t = torch.tensor(thresholds).to(device)\n",
    "neuron_activations = neuron_activations.to(device)\n",
    "# above_quantile = neuron_test[above_zero_indices].quantile(0.5, dim=0)\n",
    "\n",
    "# Calculate the quantiles for each neuron's activation range\n",
    "quantiles = torch.quantile(neuron_test, thresholds_t, dim=0)\n",
    "\n",
    "for idx, threshold in enumerate(quantiles):\n",
    "    # Determine which neurons activate above their specific quantile\n",
    "    above_threshold_mask = neuron_activations[sorted_indices, :] > threshold.unsqueeze(0)\n",
    "    neurons_activated = above_threshold_mask.float().mean(dim=0).count_nonzero()\n",
    "    current_activated_neurons[idx] = neurons_activated\n",
    "    print(f\"Quantile: {thresholds[idx]}, Neurons activated: {neurons_activated}\")\n",
    "\n",
    "# Plot scatter plot\n",
    "plt.scatter(thresholds, current_activated_neurons)\n",
    "plt.xticks(rotation=45)\n",
    "plt.xlabel(\"Quantile\")\n",
    "plt.ylabel(\"Number of neurons activated\")\n",
    "plt.title(\"Features/Neurons activated\")\n",
    "# plt.ylim(0, 200)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, 80 neurons are activating in above their top 1% of activations.\n",
    "\n",
    "Another way is to look at the decoder of the dictionary & see the weights effect on neurons since it's just a linear layer. Additionally, I'll multiply by the max-activation of that feature to show the scale of the effect on the neurons."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Check features non-zero weights in decoder\n",
    "# Plot a histogram of the weights\n",
    "max_activation = dictionary_activations[:, best_feature].max()\n",
    "weights = smaller_dict[best_feature]\n",
    "plt.hist(weights, bins=100)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.return_types.topk(\n",
       "values=tensor([-0.8944, -0.4331, -0.0469, -0.0285, -0.0125, -0.0121, -0.0101, -0.0082,\n",
       "        -0.0073, -0.0071, -0.0069, -0.0067, -0.0063, -0.0062, -0.0060, -0.0057,\n",
       "        -0.0057, -0.0056, -0.0055, -0.0054]),\n",
       "indices=tensor([ 568,  516, 1894,  468, 1326, 1458,  615,  934, 1518,  870,  672, 1889,\n",
       "        1377,  738, 1601,  754,  531, 1325,  625, 1216]))"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(weights).topk(20, largest=False)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So a few datapoints to indicate somewhere between 3 & 80 neurons, maybe several hundred depending on how you interpret the "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Feature 52: ['�', '�', '��', '�', '�', '�', '�', '��', '�', '�']\n"
     ]
    }
   ],
   "source": [
    "# Logit lens\n",
    "# Multiply feature direction by W_out[layer]\n",
    "# Then by W_U\n",
    "for n in range(52, 53):\n",
    "    b_feature = max_indices[n]\n",
    "    with torch.no_grad():\n",
    "        feature_direction = smaller_dict[b_feature].to(device)\n",
    "        residual_direction = torch.matmul(feature_direction, model.W_out[layer]) # Add bias\n",
    "        # residual_direction = model.ln_final(residual_direction)\n",
    "        logits = torch.matmul(residual_direction, model.W_U).cpu()\n",
    "    topk_values, topk_indices = torch.topk(logits, 10)\n",
    "    top_text = model.to_str_tokens(topk_indices)\n",
    "    print(f\"Feature {n}: {top_text}\")\n",
    "# print(topk_values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import circuitsvis\n",
    "# text = full_text\n",
    "# features = best_feature\n",
    "\n",
    "# if features==None:\n",
    "#     features = torch.tensor([best_feature])\n",
    "# if isinstance(features, int):\n",
    "#     features = torch.tensor([features])\n",
    "# if isinstance(features, list):\n",
    "#     features = torch.tensor(features)\n",
    "# if isinstance(text, str):\n",
    "#     text = [text]\n",
    "# text_list = []\n",
    "# logit_list = []\n",
    "# for t in text:\n",
    "#     tokens = model.to_tokens(t, prepend_bos=False)\n",
    "#     with torch.no_grad():\n",
    "#         original_logits = model(tokens).log_softmax(-1).cpu()\n",
    "#         ablated_logits = ablate_feature_direction(tokens, features, model, smaller_auto_encoder).log_softmax(-1).cpu()\n",
    "#     # diff_logits = ablated_logits  - original_logits# ablated > original -> negative diff\n",
    "#     diff_logits =   original_logits - ablated_logits# ablated > original -> negative diff\n",
    "#     tokens = tokens.cpu()\n",
    "#     split_text = model.to_str_tokens(t, prepend_bos=False)\n",
    "#     gather_tokens = rearrange(tokens[:,1:], \"b s -> b s 1\") # TODO: verify this is correct\n",
    "#     # Gather the logits for the true tokens\n",
    "#     true_log_probs = rearrange(diff_logits[:, :-1].gather(-1,gather_tokens), \"b s n -> (b s n)\")\n",
    "#     break\n",
    "# # Add an extra dim for the batch\n",
    "# diff_logits = diff_logits[0]\n",
    "# tokens = tokens[0]\n",
    "# print(diff_logits.shape, tokens.shape)\n",
    "# # circuitsvis.logits.token_log_probs(token_indices=tokens, top_k=10, log_probs=original_logits, to_string=model.to_single_str_token)\n",
    "# circuitsvis.logits.token_log_probs(token_indices=tokens, top_k=10, log_probs=diff_logits, to_string=model.to_single_str_token)\n",
    "# # circuitsvis.logits.token_log_probs(token_indices=tokens, top_k=10, log_probs=ablated_logits, to_string=model.to_single_str_token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "vscode": {
     "languageId": "shellscript"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGzCAYAAAAxPS2EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCdElEQVR4nO3df3zNdeP/8ed+2NmYbYZtlpmFYvkZNav8CJdhkSsVWpKUjxpdfiRJSaSJSirpclV0FVe4ior8GPMjNb+WRZRUJLEpbENss72+f/Td+3JsY2dtbW897rfb+8Z5vV/n9X69X+ec7bnX+8dxM8YYAQAA2Ih7RXcAAADAVQQYAABgOwQYAABgOwQYAABgOwQYAABgOwQYAABgOwQYAABgOwQYAABgOwQYAABgOwQYm6pfv77uvffeiu7GZW/69Om68sor5eHhoZYtW1Z0dyRV7GvfsWNHdezYsUK2XRIrV65Uy5Yt5e3tLTc3N2VkZFR0l5xMnDhRbm5uZdbe+vXr5ebmpvXr15dZm3ZW1uOLyo0AUwnMmzdPbm5u2r59e5HrO3bsqKZNm/7h7XzyySeaOHHiH27nr2L16tV69NFHdeONN2ru3Ll69tlnS/S8O++8U25ubho7dmypt/35559r4sSJFfILeM+ePZo4caIOHDjwp2/7jzh27JjuvPNO+fj4aNasWXrnnXdUrVq1cttewee2YPH29lZoaKhiYmL08ssv6+TJk2W2rddee03z5s0rs/bspn79+k5jff7SrVu3iu5euVmwYIFeeukll57z+eef66abblLVqlUVEhKihx9+WKdOnSqfDlY0gwo3d+5cI8ls27atyPUdOnQw11xzjVPZ2bNnTU5OjkvbiY+PN7zkJTd27Fjj7u5usrOzS/yczMxM4+3tberXr2/CwsJMfn5+qbY9ffp0I8ns37+/0LrSvPauWLx4sZFk1q1bV2hddna2S+PxZ1qxYoWRZBITE/+U7RV8bidNmmTeeecd89Zbb5lnn33WdO3a1bi5uZnw8HDz5ZdfOj0nNzfXnDlzxuVtXXPNNaZDhw6FyvPy8syZM2dMXl5eaXfDFsLDw03Lli3NO++8U2hZu3atVe+pp566rH7GxcbGmvDw8BLX37Fjh/H29jatWrUys2fPNuPHjzcOh8N069at/DpZgTwrMDvhD3A4HBXdBZedPn26XP8iLmtHjx6Vj4+PvLy8Svyc999/X3l5eXrrrbfUqVMnbdy4UR06dCjTflXka+/KWPzZjh49KkkKCAgoszZL8p7t3r272rRpYz0eN26ckpKSdMstt6hXr176+uuv5ePjI0ny9PSUp2fZ/dh1d3eXt7d3mbVX1vLz85WTk1Mmfbziiit09913l0GvLl+PP/64atSoofXr18vPz0/S77NXDzzwgFavXq2uXbtWcA/LWEUnKJRuBiY8PNwMHDjQepyTk2MmTpxoGjZsaBwOhwkMDDQ33nijWb16tTHGmIEDBxpJhZYCp06dMqNGjTJ169Y1Xl5e5qqrrjLTp08vNIPw22+/meHDh5uaNWsaX19f07NnT3Po0CEjyTz11FNWvYK/hHbv3m369+9vAgICTMuWLY0xxnz55Zdm4MCBJiIiwjgcDhMcHGwGDRpkfv31V6dtFbSxd+9eExcXZ/z8/EytWrXME088YfLz883BgwdNr169TPXq1U1wcLB5/vnnSzTeubm5ZtKkSebKK680Xl5eJjw83IwbN86cPXvWqlPUWM2dO/eSbXfu3Nn06NHDGGNMkyZNzAMPPFBkva+//trccccdplatWsbb29tcddVV5vHHH3fa7wuXgtmY81/7bdu2GUlm3rx5hbaxcuVKI8l8/PHHxhhjDhw4YB588EFz1VVXGW9vbxMYGGhuv/12p1megvfihUvBbEyHDh0KzQSkp6eb++67zwQFBRmHw2GaN29eqD/79+83ksz06dPNP//5T2vs27RpY7Zu3epU98iRI+bee+81V1xxhfHy8jIhISGmV69eRc5GFejQoUOhPp//+Vi0aJG59tprjbe3t6lZs6aJi4szhw4dcmpj4MCBplq1aua7774z3bt3N76+vubWW28tdpuX+tw+++yzRpKZM2eOVVbcDME777xjrrvuOuPj42MCAgJMu3btzKpVq4wxv7/eF+5bwWuwbt26ImfLXNnfQ4cOmVtvvdVUq1bN1KpVy4wePdqcO3fOqe706dNNdHS0CQwMNN7e3ubaa681ixcvLrQfkkx8fLx59913TWRkpPH09DQffPCBCQ8PN7169SpU/8yZM8bPz88MGTKkyDEsEB4ebmJjYy9ax5iLj2/BeNSoUcP07dvXHDx40KlOwc/ZL7/80rRv3974+PiYBg0aWPu5fv16c/3111uf16Jm+g4dOmQGDRpkgoKCjJeXl4mMjDRvvvmmU52C12zhwoXmmWeeMVdccYVxOBymU6dOZt++fU79ufB1v9hsTGZmpvH09DRjxoxxKs/Ozja+vr5m8ODBlxw/u2EGphLJzMzUr7/+Wqg8Nzf3ks+dOHGiEhISdP/99+v6669XVlaWtm/fri+++EJ/+9vf9H//9386fPiwEhMT9c477zg91xijXr16ad26dRo8eLBatmypVatWacyYMfr55581Y8YMq+69996rRYsWacCAAWrbtq02bNig2NjYYvt1xx13qFGjRnr22WdljJEkJSYm6ocfftCgQYMUEhKi3bt3a86cOdq9e7c2b95c6CS8vn37qkmTJpo6daqWL1+uZ555RoGBgfrnP/+pTp066bnnntP8+fP1yCOP6LrrrlP79u0vOlb333+/3n77bd1+++0aPXq0tmzZooSEBH399ddasmSJJOmdd97RnDlztHXrVr3xxhuSpBtuuOGi7R4+fFjr1q3T22+/LUnq37+/ZsyYoVdffdVp5mLnzp1q166dqlSpoiFDhqh+/fr6/vvv9fHHH2vKlCm67bbb9O233+o///mPZsyYoVq1akmSateuXWibbdq00ZVXXqlFixZp4MCBTusWLlyoGjVqKCYmRpK0bds2ff755+rXr5/q1q2rAwcOaPbs2erYsaP27NmjqlWrqn379nr44Yf18ssv6/HHH1eTJk0kyfr3QmfOnFHHjh313XffadiwYYqIiNDixYt17733KiMjQ//4xz+c6i9YsEAnT57U//3f/8nNzU3Tpk3Tbbfdph9++EFVqlSRJPXp00e7d+/W8OHDVb9+fR09elSJiYk6ePCg6tevX2Q/xo8fr6uvvlpz5szRpEmTFBERoQYNGkj6/VyVQYMG6brrrlNCQoLS09M1c+ZMffbZZ9qxY4fTjM25c+cUExOjm266Sc8//7yqVq1a5PZKYsCAAXr88ce1evVqPfDAA8XWe/rppzVx4kTdcMMNmjRpkry8vLRlyxYlJSWpa9eueumllzR8+HD5+vpq/PjxkqTg4OBi23Nlf/Py8hQTE6OoqCg9//zzWrNmjV544QU1aNBADz74oFVv5syZ6tWrl+Li4pSTk6P33ntPd9xxh5YtW1bo85+UlKRFixZp2LBhqlWrliIiInT33Xdr2rRpOn78uAIDA626H3/8sbKysko0s5Kbm1vkz8dq1apZM1xFmTJlip588kndeeeduv/++/XLL7/olVdeUfv27QuNx4kTJ3TLLbeoX79+uuOOOzR79mz169dP8+fP14gRIzR06FDdddddmj59um6//Xb99NNPql69uiQpPT1dbdu2lZubm4YNG6batWtrxYoVGjx4sLKysjRixAinfk2dOlXu7u565JFHlJmZqWnTpikuLk5btmyR9Pt7OjMzU4cOHbJ+Bvv6+ha7n7t27dK5c+ecZgOl32dNW7ZsqR07dlx0fG2pohMUiv+r9/zlUjMwLVq0uORfKMWdA7N06VIjyTzzzDNO5bfffrtxc3Mz3333nTHGmJSUFCPJjBgxwqnevffeW+wMTP/+/Qtt77fffitU9p///MdIMhs3bizUxvl/nZ07d87UrVvXuLm5malTp1rlJ06cMD4+Pk5jUpTU1FQjydx///1O5Y888oiRZJKSkqyygr9QS+r55583Pj4+JisryxhjzLfffmskmSVLljjVa9++valevbr58ccfncrPn+262DkwF77248aNM1WqVDHHjx+3yrKzs01AQIC57777rLKixj05OdlIMv/+97+tsoudA3PhDMxLL71kJJl3333XKsvJyTHR0dHG19fXGouCGZiaNWs69fPDDz90miU6ceKENVPjqqJmRHJyckxQUJBp2rSp07kny5YtM5LMhAkTrLKCWcrHHnus1Nu7kL+/v2nVqpX1+MIZgn379hl3d3fz97//vdB5LOe/H4o7B+bCGZjS7O+kSZOc2mzVqpVp3bq1U9mF752cnBzTtGlT06lTJ6dyScbd3d3s3r3bqXzv3r1Gkpk9e7ZTea9evUz9+vUvea5YUbNQBUtCQoJV78LxPXDggPHw8DBTpkxxam/Xrl3G09PTqbxgxmPBggVW2TfffGPt0+bNm63yVatWFZqVHTx4sKlTp06hmeR+/foZf39/awwLXrMmTZo4nU82c+ZMI8ns2rXLKnPlHJiCz+35P0ML3HHHHSYkJKRE7dgJVyFVIrNmzVJiYmKhpXnz5pd8bkBAgHbv3q19+/a5vN1PPvlEHh4eevjhh53KR48eLWOMVqxYIen3S1Ql6aGHHnKqN3z48GLbHjp0aKGy8/9aOnv2rH799Ve1bdtWkvTFF18Uqn///fdb//fw8FCbNm1kjNHgwYOt8oCAAF199dX64Ycfiu2L9Pu+StKoUaOcykePHi1JWr58+UWffzHz589XbGys9RdZo0aN1Lp1a82fP9+q88svv2jjxo267777VK9ePafnl/byz759+yo3N1cffPCBVbZ69WplZGSob9++Vtn5456bm6tjx46pYcOGCggIKHLcS+KTTz5RSEiI+vfvb5VVqVLFuvJhw4YNhfpao0YN63G7du0kyXrdCs45Wr9+vU6cOFGqPp1v+/btOnr0qB566CGn8zBiY2PVuHHjIl/v82ce/ihfX9+LXo20dOlS5efna8KECXJ3d/5xXJr3Q2n298LPaLt27Qp9js5/75w4cUKZmZlq165dke+bDh06KDIy0qnsqquuUlRUlNNn4fjx41qxYoXi4uJKtK9RUVFF/nw8/713oQ8++ED5+fm688479euvv1pLSEiIGjVqpHXr1jnV9/X1Vb9+/azHV199tQICAtSkSRNFRUU59UX63/vWGKP3339fPXv2lDHGaVsxMTHKzMwsNFaDBg1ympm98LPgqjNnzkgq+hw5b29va/3lhENIlcj1119faPpPkmrUqFHk1On5Jk2apFtvvVVXXXWVmjZtqm7dumnAgAElCj8//vijQkNDrV+8BQoOG/z444/Wv+7u7oqIiHCq17Bhw2LbvrCu9PsPrqefflrvvfeedeJlgczMzEL1L/xF7+/vL29vb+vQyvnlx44dK7Yv5+/DhX0OCQlRQECAta+u+vrrr7Vjxw7dc889+u6776zyjh07atasWcrKypKfn5/1w6ksLosv0KJFCzVu3FgLFy60Qt3ChQtVq1YtderUyap35swZJSQkaO7cufr555+tQ3pS0eNeEj/++KMaNWpU6Jfvhe+dAhe+lgVhpiCsOBwOPffccxo9erSCg4PVtm1b3XLLLbrnnnsUEhJSqv5Jv/8iulDjxo21adMmpzJPT0/VrVvX5e0U59SpUwoKCip2/ffffy93d/dCv/BLy9X99fb2LnRoskaNGoXC47Jly/TMM88oNTVV2dnZVnlRwaOoz7wk3XPPPRo2bJh+/PFHhYeHa/HixcrNzdWAAQNKtG+1atVSly5dSlS3wL59+2SMUaNGjYpcX3DYskDdunUL7ZO/v7/CwsIKlUn/e9/+8ssvysjI0Jw5czRnzpwit3Xhz7pLfRZcVRAyz399Cpw9e/aih9nsigBzmWjfvr2+//57ffjhh1q9erXeeOMNzZgxQ6+//rrTDMafragPzZ133qnPP/9cY8aMUcuWLeXr66v8/Hx169ZN+fn5hep7eHiUqEyS0y/liynrm129++67kqSRI0dq5MiRhda///77GjRoUJlu83x9+/bVlClT9Ouvv6p69er66KOP1L9/f6crXoYPH665c+dqxIgRio6Olr+/v9zc3NSvX78ix708lOR1GzFihHr27KmlS5dq1apVevLJJ5WQkKCkpCS1atWqXPvncDgKhbHSOnTokDIzMy8a8Ctaca/H+T799FP16tVL7du312uvvaY6deqoSpUqmjt3rhYsWFCofnG/KPv166eRI0dq/vz5evzxx/Xuu++qTZs2RYatspKfny83NzetWLGiyH298JyS4sbjUu/bgs/P3XffXehctAIX/jH5R3+GXahOnTqSpCNHjhRad+TIEYWGhpaq3cqMAHMZCQwM1KBBgzRo0CCdOnVK7du318SJE60AU9wv7fDwcK1Zs0YnT550moX55ptvrPUF/+bn52v//v1Of9GcP+NwKSdOnNDatWv19NNPa8KECVZ5aQ59lUbBPuzbt8/pxNT09HRlZGRY++oKY4wWLFigm2++udDhNUmaPHmy5s+fr0GDBunKK6+UJH311VcXbdPVgNW3b189/fTTev/99xUcHKysrCynqXBJ+u9//6uBAwfqhRdesMrOnj1b6GZ5rmw7PDxcO3fuVH5+vtMv/gvfO65q0KCBRo8erdGjR2vfvn1q2bKlXnjhBSsoutI/Sdq7d6/TbFRBWWn7VxIFJ8sXnERdlAYNGig/P1979uy56J2eS/qalMf+vv/++/L29taqVaucDk/MnTvXpXYCAwMVGxur+fPnKy4uTp999pnLN2lzVYMGDWSMUUREhK666qpy207t2rVVvXp15eXluTxLdDGufBabNm0qT09Pbd++XXfeeadVnpOTo9TUVKeyywXnwFwmLjx04uvrq4YNGzpNJxbcz+LCX1g9evRQXl6eXn31VafyGTNmyM3NTd27d5f0vx/Er732mlO9V155pcT9LPir48K/Msr7B1mBHj16FLm9F198UZIuekVVcT777DMdOHBAgwYN0u23315o6du3r9atW6fDhw+rdu3aat++vd566y0dPHjQqZ3zx6S416o4TZo0UbNmzbRw4UItXLhQderUKXQ1loeHR6Fxf+WVV5SXl+dU5sq2e/ToobS0NC1cuNAqO3funF555RX5+vq6fA+c3377TWfPnnUqa9CggapXr17k1PiltGnTRkFBQXr99dednr9ixQp9/fXXpXq9SyIpKUmTJ09WRESE4uLiiq3Xu3dvubu7a9KkSYVmwS58P5Tk9SiP/fXw8JCbm5vT++TAgQNaunSpy20NGDBAe/bs0ZgxY+Th4VEoZJe12267TR4eHnr66acLvfeNMZc85FxSHh4e6tOnj95///0i/zj55ZdfStVutWrVSnx419/fX126dNG7777rdN7VO++8o1OnTumOO+4oVR8qM2ZgLhORkZHq2LGjWrdurcDAQG3fvl3//e9/NWzYMKtO69atJUkPP/ywYmJirB8gPXv21M0336zx48frwIEDatGihVavXq0PP/xQI0aMsC5Hbd26tfr06aOXXnpJx44dsy6j/vbbbyWV7K8FPz8/tW/fXtOmTVNubq6uuOIKrV69Wvv37y+HUSmsRYsWGjhwoObMmaOMjAx16NBBW7du1dtvv63evXvr5ptvdrnN+fPny8PDo9hfDr169dL48eP13nvvadSoUXr55Zd100036dprr9WQIUMUERGhAwcOaPny5UpNTZX0v9dq/Pjx6tevn6pUqaKePXte9KZqffv21YQJE+Tt7a3BgwcXOhRyyy236J133pG/v78iIyOVnJysNWvWqGbNmk71WrZsKQ8PDz333HPKzMyUw+FQp06dijyXY8iQIfrnP/+pe++9VykpKapfv77++9//Wn9dX3he1aV8++236ty5s+68805FRkbK09NTS5YsUXp6eql+2VWpUkXPPfecBg0apA4dOqh///7WZcX169cv8nCfq1asWKFvvvlG586dU3p6upKSkpSYmKjw8HB99NFHF72JW8OGDTV+/HhNnjxZ7dq102233SaHw6Ft27YpNDRUCQkJkn5/P8yePVvPPPOMGjZsqKCgoEIzLOW1v7GxsXrxxRfVrVs33XXXXTp69KhmzZqlhg0baufOnS63VbNmTS1evFjdu3e/6PlBF/r555+LnIHz9fVV7969i3xOgwYN9Mwzz2jcuHE6cOCAevfurerVq2v//v1asmSJhgwZokceecSlfSjO1KlTtW7dOkVFRemBBx5QZGSkjh8/ri+++EJr1qzR8ePHXW6zdevWWrhwoUaNGqXrrrtOvr6+6tmzZ7H1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IyPDaRYmPT1dISEhkqSQkBBt3brVqb2Cq5TOr3PhlUvp6eny8/OTj49Psf1yOBxyOByu7g4AALChP3wfmPz8fGVnZ6t169aqUqWK1q5da63bu3evDh48qOjoaElSdHS0du3apaNHj1p1EhMT5efnp8jISKvO+W0U1CloAwAAwKUZmHHjxql79+6qV6+eTp48qQULFmj9+vVatWqV/P39NXjwYI0aNUqBgYHy8/PT8OHDFR0drbZt20qSunbtqsjISA0YMEDTpk1TWlqannjiCcXHx1uzJ0OHDtWrr76qRx99VPfdd5+SkpK0aNEiLV9efleNAAAAe3EpwBw9elT33HOPjhw5In9/fzVv3lyrVq3S3/72N0nSjBkz5O7urj59+ig7O1sxMTF67bXXrOd7eHho2bJlevDBBxUdHa1q1app4MCBmjRpklUnIiJCy5cv18iRIzVz5kzVrVtXb7zxhmJiYspolwEAgN394fvAVFbcBwYXw31gAKByKvf7wAAAAFQUAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdAgwAALAdlwJMQkKCrrvuOlWvXl1BQUHq3bu39u7d61SnY8eOcnNzc1qGDh3qVOfgwYOKjY1V1apVFRQUpDFjxujcuXNOddavX69rr71WDodDDRs21Lx580q3hwAA4LLjUoDZsGGD4uPjtXnzZiUmJio3N1ddu3bV6dOnneo98MADOnLkiLVMmzbNWpeXl6fY2Fjl5OTo888/19tvv6158+ZpwoQJVp39+/crNjZWN998s1JTUzVixAjdf//9WrVq1R/cXQAAcDnwdKXyypUrnR7PmzdPQUFBSklJUfv27a3yqlWrKiQkpMg2Vq9erT179mjNmjUKDg5Wy5YtNXnyZI0dO1YTJ06Ul5eXXn/9dUVEROiFF16QJDVp0kSbNm3SjBkzFBMT4+o+AgCAy8wfOgcmMzNTkhQYGOhUPn/+fNWqVUtNmzbVuHHj9Ntvv1nrkpOT1axZMwUHB1tlMTExysrK0u7du606Xbp0cWozJiZGycnJxfYlOztbWVlZTgsAALg8uTQDc778/HyNGDFCN954o5o2bWqV33XXXQoPD1doaKh27typsWPHau/evfrggw8kSWlpaU7hRZL1OC0t7aJ1srKydObMGfn4+BTqT0JCgp5++unS7g4AALCRUgeY+Ph4ffXVV9q0aZNT+ZAhQ6z/N2vWTHXq1FHnzp31/fffq0GDBqXv6SWMGzdOo0aNsh5nZWUpLCys3LYHAAAqTqkOIQ0bNkzLli3TunXrVLdu3YvWjYqKkiR99913kqSQkBClp6c71Sl4XHDeTHF1/Pz8ipx9kSSHwyE/Pz+nBQAAXJ5cCjDGGA0bNkxLlixRUlKSIiIiLvmc1NRUSVKdOnUkSdHR0dq1a5eOHj1q1UlMTJSfn58iIyOtOmvXrnVqJzExUdHR0a50FwAAXKZcOoQUHx+vBQsW6MMPP1T16tWtc1b8/f3l4+Oj77//XgsWLFCPHj1Us2ZN7dy5UyNHjlT79u3VvHlzSVLXrl0VGRmpAQMGaNq0aUpLS9MTTzyh+Ph4ORwOSdLQoUP16quv6tFHH9V9992npKQkLVq0SMuXLy/j3Qfso/5j5ff+PzA1ttzaBoDy4NIMzOzZs5WZmamOHTuqTp061rJw4UJJkpeXl9asWaOuXbuqcePGGj16tPr06aOPP/7YasPDw0PLli2Th4eHoqOjdffdd+uee+7RpEmTrDoRERFavny5EhMT1aJFC73wwgt64403uIQaAABIcnEGxhhz0fVhYWHasGHDJdsJDw/XJ598ctE6HTt21I4dO1zpHgAA+Ivgu5AAAIDtlPoyagAAKiPOF/trYAYGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYjmdFd8CO+Kp2AAAqFjMwAADAdggwAADAdggwAADAdggwAADAdggwAADAdggwAADAdriMGgCAEiqv22hwCw3XMQMDAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABsx6UAk5CQoOuuu07Vq1dXUFCQevfurb179zrVOXv2rOLj41WzZk35+vqqT58+Sk9Pd6pz8OBBxcbGqmrVqgoKCtKYMWN07tw5pzrr16/XtddeK4fDoYYNG2revHml20MAAHDZcSnAbNiwQfHx8dq8ebMSExOVm5urrl276vTp01adkSNH6uOPP9bixYu1YcMGHT58WLfddpu1Pi8vT7GxscrJydHnn3+ut99+W/PmzdOECROsOvv371dsbKxuvvlmpaamasSIEbr//vu1atWqMthlAABgd56uVF65cqXT43nz5ikoKEgpKSlq3769MjMz9eabb2rBggXq1KmTJGnu3Llq0qSJNm/erLZt22r16tXas2eP1qxZo+DgYLVs2VKTJ0/W2LFjNXHiRHl5een1119XRESEXnjhBUlSkyZNtGnTJs2YMUMxMTFF9i07O1vZ2dnW46ysLJcGAgAA2McfOgcmMzNTkhQYGChJSklJUW5urrp06WLVady4serVq6fk5GRJUnJyspo1a6bg4GCrTkxMjLKysrR7926rzvltFNQpaKMoCQkJ8vf3t5awsLA/smsAAKASK3WAyc/P14gRI3TjjTeqadOmkqS0tDR5eXkpICDAqW5wcLDS0tKsOueHl4L1BesuVicrK0tnzpwpsj/jxo1TZmamtfz000+l3TUAAFDJuXQI6Xzx8fH66quvtGnTprLsT6k5HA45HI6K7gYAAPgTlGoGZtiwYVq2bJnWrVununXrWuUhISHKyclRRkaGU/309HSFhIRYdS68Kqng8aXq+Pn5ycfHpzRdBgAAlxGXAowxRsOGDdOSJUuUlJSkiIgIp/WtW7dWlSpVtHbtWqts7969OnjwoKKjoyVJ0dHR2rVrl44ePWrVSUxMlJ+fnyIjI60657dRUKegDQAA8Nfm0iGk+Ph4LViwQB9++KGqV69unbPi7+8vHx8f+fv7a/DgwRo1apQCAwPl5+en4cOHKzo6Wm3btpUkde3aVZGRkRowYICmTZumtLQ0PfHEE4qPj7cOAQ0dOlSvvvqqHn30Ud13331KSkrSokWLtHz58jLefQAAYEcuzcDMnj1bmZmZ6tixo+rUqWMtCxcutOrMmDFDt9xyi/r06aP27dsrJCREH3zwgbXew8NDy5Ytk4eHh6Kjo3X33Xfrnnvu0aRJk6w6ERERWr58uRITE9WiRQu98MILeuONN4q9hBoAAPy1uDQDY4y5ZB1vb2/NmjVLs2bNKrZOeHi4Pvnkk4u207FjR+3YscOV7gEAgL8IvgsJAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYDgEGAADYjmdFdwC43NR/bHlFdwEALnvMwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANvhqwQAAMUqz6/GODA1ttzaxuWPGRgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7BBgAAGA7LgeYjRs3qmfPngoNDZWbm5uWLl3qtP7ee++Vm5ub09KtWzenOsePH1dcXJz8/PwUEBCgwYMH69SpU051du7cqXbt2snb21thYWGaNm2a63sHAAAuSy4HmNOnT6tFixaaNWtWsXW6deumI0eOWMt//vMfp/VxcXHavXu3EhMTtWzZMm3cuFFDhgyx1mdlZalr164KDw9XSkqKpk+frokTJ2rOnDmudhcAAFyGPF19Qvfu3dW9e/eL1nE4HAoJCSly3ddff62VK1dq27ZtatOmjSTplVdeUY8ePfT8888rNDRU8+fPV05Ojt566y15eXnpmmuuUWpqql588UWnoAMAAP6ayuUcmPXr1ysoKEhXX321HnzwQR07dsxal5ycrICAACu8SFKXLl3k7u6uLVu2WHXat28vLy8vq05MTIz27t2rEydOFLnN7OxsZWVlOS0AAODyVOYBplu3bvr3v/+ttWvX6rnnntOGDRvUvXt35eXlSZLS0tIUFBTk9BxPT08FBgYqLS3NqhMcHOxUp+BxQZ0LJSQkyN/f31rCwsLKetcAAEAl4fIhpEvp16+f9f9mzZqpefPmatCggdavX6/OnTuX9eYs48aN06hRo6zHWVlZhBgAAC5T5X4Z9ZVXXqlatWrpu+++kySFhITo6NGjTnXOnTun48ePW+fNhISEKD093alOwePizq1xOBzy8/NzWgAAwOWp3APMoUOHdOzYMdWpU0eSFB0drYyMDKWkpFh1kpKSlJ+fr6ioKKvOxo0blZuba9VJTEzU1VdfrRo1apR3lwEAQCXncoA5deqUUlNTlZqaKknav3+/UlNTdfDgQZ06dUpjxozR5s2bdeDAAa1du1a33nqrGjZsqJiYGElSkyZN1K1bNz3wwAPaunWrPvvsMw0bNkz9+vVTaGioJOmuu+6Sl5eXBg8erN27d2vhwoWaOXOm0yEiAADw1+VygNm+fbtatWqlVq1aSZJGjRqlVq1aacKECfLw8NDOnTvVq1cvXXXVVRo8eLBat26tTz/9VA6Hw2pj/vz5aty4sTp37qwePXropptucrrHi7+/v1avXq39+/erdevWGj16tCZMmMAl1AAAQFIpTuLt2LGjjDHFrl+1atUl2wgMDNSCBQsuWqd58+b69NNPXe0eAAD4C+C7kAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO0QYAAAgO14VnQHAAB/TfUfW17RXYCNMQMDAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABsx+UAs3HjRvXs2VOhoaFyc3PT0qVLndYbYzRhwgTVqVNHPj4+6tKli/bt2+dU5/jx44qLi5Ofn58CAgI0ePBgnTp1yqnOzp071a5dO3l7eyssLEzTpk1zfe8AAMBlyeUAc/r0abVo0UKzZs0qcv20adP08ssv6/XXX9eWLVtUrVo1xcTE6OzZs1aduLg47d69W4mJiVq2bJk2btyoIUOGWOuzsrLUtWtXhYeHKyUlRdOnT9fEiRM1Z86cUuwiAAC43Hi6+oTu3bure/fuRa4zxuill17SE088oVtvvVWS9O9//1vBwcFaunSp+vXrp6+//lorV67Utm3b1KZNG0nSK6+8oh49euj5559XaGio5s+fr5ycHL311lvy8vLSNddco9TUVL344otOQQcAAPw1lek5MPv371daWpq6dOlilfn7+ysqKkrJycmSpOTkZAUEBFjhRZK6dOkid3d3bdmyxarTvn17eXl5WXViYmK0d+9enThxoshtZ2dnKysry2kBAACXpzINMGlpaZKk4OBgp/Lg4GBrXVpamoKCgpzWe3p6KjAw0KlOUW2cv40LJSQkyN/f31rCwsL++A4BAIBKyeVDSJXVuHHjNGrUKOtxVlYWIeZPUv+x5eXW9oGpseXWNgDAvsp0BiYkJESSlJ6e7lSenp5urQsJCdHRo0ed1p87d07Hjx93qlNUG+dv40IOh0N+fn5OCwAAuDyVaYCJiIhQSEiI1q5da5VlZWVpy5Ytio6OliRFR0crIyNDKSkpVp2kpCTl5+crKirKqrNx40bl5uZadRITE3X11VerRo0aZdllAABgQy4HmFOnTik1NVWpqamSfj9xNzU1VQcPHpSbm5tGjBihZ555Rh999JF27dqle+65R6Ghoerdu7ckqUmTJurWrZseeOABbd26VZ999pmGDRumfv36KTQ0VJJ01113ycvLS4MHD9bu3bu1cOFCzZw50+kQEQAA+Oty+RyY7du36+abb7YeF4SKgQMHat68eXr00Ud1+vRpDRkyRBkZGbrpppu0cuVKeXt7W8+ZP3++hg0bps6dO8vd3V19+vTRyy+/bK339/fX6tWrFR8fr9atW6tWrVqaMGECl1ADAABJpQgwHTt2lDGm2PVubm6aNGmSJk2aVGydwMBALViw4KLbad68uT799FNXuwcAAP4CLpurkHB5Ks8rnAAA9sWXOQIAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANshwAAAANvxrOgOAKh49R9bXi7tHpgaWy7tAgAzMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHYIMAAAwHY8K7oDcFb/seXl0u6BqbHl0i4AABWBAPMXUV7BCACAisAhJAAAYDsEGAAAYDsEGAAAYDtlHmAmTpwoNzc3p6Vx48bW+rNnzyo+Pl41a9aUr6+v+vTpo/T0dKc2Dh48qNjYWFWtWlVBQUEaM2aMzp07V9ZdBQAANlUuJ/Fec801WrNmzf824vm/zYwcOVLLly/X4sWL5e/vr2HDhum2227TZ599JknKy8tTbGysQkJC9Pnnn+vIkSO65557VKVKFT377LPl0V0AAGAz5RJgPD09FRISUqg8MzNTb775phYsWKBOnTpJkubOnasmTZpo8+bNatu2rVavXq09e/ZozZo1Cg4OVsuWLTV58mSNHTtWEydOlJeXV3l0GQAA2Ei5nAOzb98+hYaG6sorr1RcXJwOHjwoSUpJSVFubq66dOli1W3cuLHq1aun5ORkSVJycrKaNWum4OBgq05MTIyysrK0e/fuYreZnZ2trKwspwUAAFyeyjzAREVFad68eVq5cqVmz56t/fv3q127djp58qTS0tLk5eWlgIAAp+cEBwcrLS1NkpSWluYUXgrWF6wrTkJCgvz9/a0lLCysbHcMAABUGmV+CKl79+7W/5s3b66oqCiFh4dr0aJF8vHxKevNWcaNG6dRo0ZZj7OysggxAABcpsr9MuqAgABdddVV+u677xQSEqKcnBxlZGQ41UlPT7fOmQkJCSl0VVLB46LOqyngcDjk5+fntAAAgMtTuQeYU6dO6fvvv1edOnXUunVrValSRWvXrrXW7927VwcPHlR0dLQkKTo6Wrt27dLRo0etOomJifLz81NkZGR5dxcAANhAmR9CeuSRR9SzZ0+Fh4fr8OHDeuqpp+Th4aH+/fvL399fgwcP1qhRoxQYGCg/Pz8NHz5c0dHRatu2rSSpa9euioyM1IABAzRt2jSlpaXpiSeeUHx8vBwOR1l3FwAA2FCZB5hDhw6pf//+OnbsmGrXrq2bbrpJmzdvVu3atSVJM2bMkLu7u/r06aPs7GzFxMTotddes57v4eGhZcuW6cEHH1R0dLSqVaumgQMHatKkSWXdVQAAYFNlHmDee++9i6739vbWrFmzNGvWrGLrhIeH65NPPinrrgEAgMsE34UEAABshwADAABshwADAABshwADAABshwADAABshwADAABshwADAABsp8zvAwMAAFxT/7Hl5db2gamx5dZ2RWIGBgAA2A4BBgAA2A4B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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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97u156uvvtLhw4dd4369UxtlypSRn59fLvdS/sMRixxITEzU6dOnPcqvXLly3WVHjBihhIQE9evXT/Xr11dSUpI2b96srVu3qlWrVnrmmWd0/PhxrVixQtOnT3db1hijjh07as2aNerbt69q1aqlZcuW6cUXX9SxY8c0fvx4V90+ffpo3rx56t27tx544AGtW7dO7dq1y7JdXbp0UcWKFfXmm2+6QsqKFSv0888/Ky4uTuHh4dq1a5cmT56sXbt2aePGjR5vvN26dVOVKlU0ZswYffXVVxo1apSKFi2qjz76SC1atNDYsWM1c+ZMDR06VPXq1VOTJk2y3Vf9+vXTp59+qscff1xDhgzRd999p4SEBP34449auHChJGn69OmaPHmyvv/+e/3zn/+UJDVs2DDb9R4/flxr1qxxfaj26NFD48eP19///ne3v/R37Nihxo0by8/PT/3791dUVJQOHDigf//73xo9erQeffRR/fTTT5o9e7bGjx+v4sWLS5JKlCjhsc26deuqXLlymjdvnuuDNd3cuXNVpEgRtW7dWpK0adMmffvtt+revbvKli2rQ4cOadKkSWrWrJl2796tu+66S02aNNHAgQP1/vvv65VXXlGVKlUkyfVvRhcvXlSzZs20f/9+Pffcc4qOjtb8+fPVp08fnTt3Tn/961/d6s+aNUvJycl65pln5HA49NZbb+nRRx/Vzz//7HpDfOyxx7Rr1y49//zzioqK0qlTp7RixQr98ssvWb6xvvrqq6pUqZImT56sN954Q9HR0SpfvrykP8JSXFyc6tWrp4SEBJ08eVLvvfeevvnmG23bts3tCMfVq1fVunVrNWrUSOPGjdNdd92V6fZyonfv3nrllVe0fPlyPf3001nWi4+P14gRI9SwYUO98cYb8vf313fffafVq1fr4Ycf1oQJE/T8888rKCjIFT5LlSqV5fq86W9qaqpat26tmJgYjRs3TitXrtQ777yj8uXL6y9/+Yur3nvvvaeOHTuqZ8+eunz5subMmaMuXbroyy+/9Hj9r169WvPmzdNzzz2n4sWLKzo6Wr169dJbb72l3377TUWLFnXV/fe//62kpKQcHYm4cuVKpu+PhQsXdh0Ryszo0aP12muvqWvXrurXr59+/fVXffDBB2rSpInH/jh79qzat2+v7t27q0uXLpo0aZK6d++umTNnatCg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V/Hx8R7PfWPMdU+d5pSvr68ee+wxLViwINM/Gn799ddcrbdw4cK5Pk15J+CIRR6rWrWqmjVrpjp16qho0aLavHmzPvvsMz333HOuOnXq1JEkDRw4UK1bt3a9sDt06KDmzZvr1Vdf1aFDh1SzZk0tX75cixcv1qBBg1zT9urUqaPHHntMEyZM0JkzZ1zTTX/66SdJOUvXISEhatKkid566y1duXJFd999t5YvX66DBw/mwV7xVLNmTcXGxmry5Mk6d+6cmjZtqu+//16ffvqpOnfurObNm3u9zpkzZ8rX1zfLN+2OHTvq1Vdf1Zw5czR48GC9//77atSoke6//371799f0dHROnTokL766itt375d0v/G6tVXX1X37t3l5+enDh06ZPtlTd26ddPrr7+ugIAA9e3b1+OQfvv27TV9+nSFhoaqatWq2rBhg1auXKlixYq51atVq5Z8fX01duxYJSYmyul0qkWLFpleK9C/f3999NFH6tOnj7Zs2aKoqCh99tlnrr9GM163cz0//fSTHnroIXXt2lVVq1ZVoUKFtHDhQp08eTJXH0J+fn4aO3as4uLi1LRpU/Xo0cM1/TIqKirT01beWrJkifbs2aOrV6/q5MmTWr16tVasWKHIyEh98cUX2X45VIUKFfTqq69q5MiRaty4sR599FE5nU5t2rRJZcqUUUJCgqQ/ng+TJk3SqFGjVKFCBZUsWdLjiERe9bddu3Z699131aZNGz3xxBM6deqUJk6cqAoVKmjHjh1er6tYsWKaP3++2rZtm+31JxkdO3Ys0yNWQUFB6ty5c6bLlC9fXqNGjdKwYcN06NAhde7cWcHBwTp48KAWLlyo/v37a+jQoV71IStjxozRmjVrFBMTo6efflpVq1bVb7/9pq1bt2rlypX67bffvF5nnTp1NHfuXA0ePFj16tVTUFCQOnTokGX9HTt26IsvvpD0x5HkxMREjRo1StIf733ZLZsv3expKPlJbr7SO+OUw1GjRpn69eubsLAwExgYaCpXrmxGjx7t9tXPV69eNc8//7wpUaKEcTgcbtOykpOTzQsvvGDKlClj/Pz8TMWKFc3bb7/tMQ3swoULZsCAAaZo0aImKCjIdO7c2TWV7Nrpn+nTvn799VeP/hw9etT86U9/MmFhYSY0NNR06dLFHD9+PMspqxnXkdU00Mz2U2auXLli4uPjTXR0tPHz8zMRERFm2LBh5tKlSznazrUuX75sihUrZho3bpxtvejoaLdphz/88INrHwQEBJhKlSqZ1157zW2ZkSNHmrvvvtv4+Pi4TT3NOPbp9u3b55qC95///Mfj8bNnz5q4uDhTvHhxExQUZFq3bm327NmT6fo+/vhjU65cOePr6+s2nTHjdFNjjDl58qRrvf7+/ua+++5zm4ZnzP+mm2Y2jfTacT99+rQZMGCAqVy5silcuLAJDQ01MTExZt68eZ47NYPsXkdz5841tWvXNk6n0xQtWtT07NnTHD161K2Ot9OLM04T9/f3N+Hh4aZVq1bmvffec021vVZWXzk9ZcoUV/uKFClimjZt6vbV5CdOnDDt2rUzwcHBRpJrDDJON7XR38za+Mknn5iKFSsap9NpKleubKZOnZppPUlmwIAB2e63Z5991mNa5/VkN9302imVWe3fBQsWmEaNGpnChQubwoULm8qVK5sBAwaYvXv3uupk9f4RGRmZ6VT+zPp68uRJM2DAABMREWH8/PxMeHi4eeihh8zkyZNdddLHbP78+W7Lpr9Grn3tnD9/3jzxxBMmLCzMo6+Zye6rC643FT8/chjDFSkF1fbt21W7dm3NmDEj199UCODO8MILL+iTTz7RiRMnbugLyACusSggLl686FE2YcIE+fj4XPcbLwHc2S5duqQZM2boscceI1TghnGNRQHx1ltvacuWLWrevLkKFSqkJUuWaMmSJerfv7/HXG8AkP74DoeVK1fqs88+05kzZzy+6h3IDYJFAdGwYUOtWLFCI0eO1Pnz53XPPfdoxIgRrt8wAICMdu/erZ49e6pkyZJ6//33s51aC+QU11gAAABruMYCAABYQ7AAAADW3PRrLNLS0nT8+HEFBwfztagAAOQTxhglJyerTJky2f52z00PFsePH2eWAgAA+dSRI0ey/bXhmx4s0r9K+MiRIwoJCbnZmwcAALmQlJSkiIiI6/4kwE0PFumnP0JCQggWAADkM9e7jIGLNwEAgDUECwAAYA3BAgAAWEOwAAAA1hAsAACANQQLAABgDcECAABYQ7AAAADWECwAAIA1BAsAAGCN18Hi2LFj6tWrl4oVK6bAwEDdd9992rx5c160DQAA5DNe/VbI2bNn9eCDD6p58+ZasmSJSpQooX379qlIkSJ51T4AAJCPeBUsxo4dq4iICE2d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fftq27Zt6ty5szp37qwffvjBVeett97S+++/rw8//FDfffedChcurNatW+vSpUs3o0vX5W2f165dqx49emjNmjXasGGDIiIi9PDDD+vYsWNu9dq0aaP//ve/rtvs2bNvRndyzNt+S398/e21fTp8+LDb4wVtrD///HO3/v7www/y9fVVly5d3Ord7mN94cIF1axZUxMnTsxR/YMHD6pdu3Zq3ry5tm/frkGDBqlfv35uH7S5ef7cTN72ef369WrVqpW+/vprbdmyRc2bN1eHDh20bds2t3rVqlVzG+v//Oc/edH8XPO23+n27t3r1q+SJUu6HitoY/3ee++59fXIkSMqWrSox+v6dh9rK8xNUL9+fTNgwADX/dTUVFOmTBmTkJCQaf2uXbuadu3auZXFxMSYZ555xhhjTFpamgkPDzdvv/226/Fz584Zp9NpZs+enQc98J63fc7o6tWrJjg42Hz66aeustjYWNOpUyfbTbXK235PnTrVhIaGZrm+O2Gsx48fb4KDg8358+ddZflhrK8lySxcuDDbOn/7299MtWrV3Mq6detmWrdu7bp/o/vyZspJnzNTtWpVEx8f77o/fPhwU7NmTXsNy2M56feaNWuMJHP27Nks6xT0sV64cKFxOBzm0KFDrrL8Nta5ledHLC5fvqwtW7aoZcuWrjIfHx+1bNlSGzZsyHSZDRs2uNWXpNatW7vqHzx4UCdOnHCrExoaqpiYmCzXeTPlps8Z/f7777py5YqKFi3qVr527VqVLFlSlSpV0l/+8hedOXPGattvRG77ff78eUVGRioiIkKdOnXSrl27XI/dCWP9ySefqHv37ipcuLBb+e081rlxvde1jX15u0tLS1NycrLH63rfvn0qU6aMypUrp549e+qXX365RS20q1atWipdurRatWqlb775xlV+J4z1J598opYtWyoyMtKtvKCO9bXyPFicPn1aqampHl/5XapUKY/zbelOnDiRbf30f71Z582Umz5n9NJLL6lMmTJuL7w2bdroX//6l1atWqWxY8dq3bp1atu2rVJTU622P7dy0+9KlSppypQpWrx4sWbMmKG0tDQ1bNhQR48elVTwx/r777/XDz/8oH79+rmV3+5jnRtZva6TkpJ08eJFK6+b2924ceN0/vx5de3a1VUWExOjadOmaenSpZo0aZIOHjyoxo0bKzk5+Ra29MaULl1aH374oRYsWKAFCxYoIiJCzZo109atWyXZeY+8nR0/flxLlizxeF0XxLHOjNe/FYK8N2bMGM2ZM0dr1651u5Cxe/furv/fd999qlGjhsqXL6+1a9fqoYceuhVNvWENGjRw+2Xchg0bqkqVKvroo480cuTIW9iym+OTTz7Rfffdp/r167uVF8SxvtPNmjVL8fHxWrx4sdu1Bm3btnX9v0aNGoqJiVFkZKTmzZunvn373oqm3rBKlSqpUqVKrvsNGzbUgQMHNH78eE2fPv0Wtuzm+PTTTxUWFqbOnTu7lRfEsc5Mnh+xKF68uHx9fXXy5Em38pMnTyo8PDzTZcLDw7Otn/6vN+u8mXLT53Tjxo3TmDFjtHz5ctWoUSPbuuXKlVPx4sW1f//+G26zDTfS73R+fn6qXbu2q08FeawvXLigOXPm5OgN5XYb69zI6nUdEhKiwMBAK8+f29WcOXPUr18/zZs3z+N0UEZhYWG699578/VYZ6Z+/fquPhXksTbGaMqUKerdu7f8/f2zrVtQxzrPg4W/v7/q1KmjVatWucrS0tK0atUqt79Ur9WgQQO3+pK0YsUKV/3o6GiFh4e71UlKStJ3332X5Tpvptz0Wfpj9sPIkSO1dOlS1a1b97rbOXr0qM6cOaPSpUtbafeNym2/r5WamqqdO3e6+lRQx1r6Y0p1SkqKevXqdd3t3G5jnRvXe13beP7cjmbPnq24uDjNnj3bbUpxVs6fP68DBw7k67HOzPbt2119KqhjLUnr1q3T/v37c/QHQ0Ed65syK2TOnDnG6XSaadOmmd27d5v+/fubsLAwc+LECWOMMb179zYvv/yyq/4333xjChUqZMaNG2d+/PFHM3z4cOPn52d27tzpqjNmzBgTFhZmFi9ebHbs2GE6depkoqOjzcWLF29Gl67L2z6PGTPG+Pv7m88++8z897//dd2Sk5ONMcYkJyeboUOHmg0bNpiDBw+alStXmvvvv99UrFjRXLp06Zb0MTPe9js+Pt4sW7bMHDhwwGzZssV0797dBAQEmF27drnqFLSxTteoUSPTrVs3j/L8MtbJyclm27ZtZtu2bUaSeffdd822bdvM4cOHjTHGvPzyy6Z3796u+j///LO56667zIsvvmh+/PFHM3HiROPr62uWLl3qqnO9fXmredvnmTNnmkKFCpmJEye6va7PnTvnqjNkyBCzdu1ac/DgQfPNN9+Yli1bmuLFi5tTp07d9P5lxdt+jx8/3ixatMjs27fP7Ny50/z1r381Pj4+ZuXKla46BW2s0/Xq1cvExMRkus78MNY23JRgYYwxH3zwgbnnnnuMv7+/qV+/vtm4caPrsaZNm5rY2Fi3+vPmzTP33nuv8ff3N9WqVTNfffWV2+NpaWnmtddeM6VKlTJOp9M89NBDZu/evTejKznmTZ8jIyONJI/b8OHDjTHG/P777+bhhx82JUqUMH5+fiYyMtI8/fTTt82L8Fre9HvQoEGuuqVKlTKPPPKI2bp1q9v6CtpYG2PMnj17jCSzfPlyj3Xll7FOn1KY8Zbe19jYWNO0aVOPZWrVqmX8/f1NuXLlzNSpUz3Wm92+vNW87XPTpk2zrW/MH1NuS5cubfz9/c3dd99tunXrZvbv339zO3Yd3vZ77Nixpnz58iYgIMAULVrUNGvWzKxevdpjvQVprI35Yyp8YGCgmTx5cqbrzA9jbYPDGGPy+KAIAAC4Q/BbIQAAwBqCBQAAsIZgAQAArCFYAAAAawgWAADAGoIFAACwhmABAACsIVgAAABrCBYAAMAaggUAALCGYAEAAKz5/0ZENAZMsLPdAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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EhISTPXq1U2FChVMkyZNzMsvv+zSJ/8xmz9/vhk/fry58MILTUBAgOnatavZtm2bSz0FH/fizoKc7p133jGSzDvvvFPi257vmPnwkMzMTB06dMitPScn56y3TUlJUVpamu688061a9dOWVlZWr9+vTZu3Kirr75ad999t/bt26fly5dr9uzZLrc1xqh3795atWqVBg8erBYtWmjp0qV66KGH9Msvv+iZZ55x9h00aJAWLFig2267TZdddpk+/vhjxcbGFlnXzTffrAYNGujxxx+XMUaStHz5cv38889KSEhQzZo1tWXLFs2YMUNbtmzR2rVr3XYY69+/vxo3bqyJEyfq/fff1/jx4xUeHq7p06era9eueuKJJzRnzhw9+OCDatu2rWJiYs64re688069+uqr6tu3r0aMGKEvvvhCaWlp+v7777Vo0SJJ0uzZszVjxgx9+eWX+s9//iNJuvzyy8+43n379mnVqlV69dVXJUkDBw7UM888oylTprjMGHzzzTfq2LGjypcvryFDhigqKko//fST3n33XU2YMEE33nijfvzxR73++ut65plnVLVqVUlStWrV3MZs06aNLrroIi1YsEDx8fEu182fP1+VK1dW9+7dJUnr1q3TZ599pgEDBqh27drauXOnpk2bps6dO+u7777TBRdcoJiYGN1333167rnn9Mgjj6hx48aS5Py3oD/++EOdO3fW9u3bNXToUEVHR+uNN97QoEGDdOTIEd1///0u/efOnaujR4/q7rvvlsPh0KRJk3TjjTfq559/Vvny5SVJN910k7Zs2aJhw4YpKipKBw4c0PLly7V7925FRUUVWsejjz6qiy++WDNmzNDYsWMVHR2tevXqSfpr34yEhAS1bdtWaWlpysjI0LPPPqtPP/1UX331lctMyZ9//qnu3bvryiuv1JNPPqkLLrig0PGK47bbbtMjjzyiZcuW6a677iqyX2pqqlJSUnT55Zdr7NixqlChgr744gutXLlS11xzjdLT0zVs2DAFBwfr0UcflSTVqFGjyPWV5P7m5uaqe/fuat++vZ588kl99NFHeuqpp1SvXj3961//cvZ79tln1bt3b8XFxenUqVOaN2+ebr75Zr333ntur/+VK1dqwYIFGjp0qKpWraro6GjdeuutmjRpkn7//XeFh4c7+7777rvKysoq1oxGTk5Ooe+PFStWdM4sFWbChAkaNWqU+vXrpzvvvFMHDx7U888/r5iYGLftcfjwYfXs2VMDBgzQzTffrGnTpmnAgAGaM2eOhg8frnvuuUe33HKLJk+erL59+2rPnj0KCQmRJGVkZOiyyy6Tw+HQ0KFDVa1aNS1ZskSDBw9WVlaWhg8f7lLXxIkT5efnpwcffFCZmZmaNGmS4uLi9MUXX0j66zmdmZmpvXv3Ot+Dg4ODz7qdCtq/f78kOd9HyhRfp5/Srqhvm6cvZ5v5aN68+Vm/GRS1z8fixYuNJDN+/HiX9r59+xqHw2G2b99ujDFmw4YNRpIZPny4S79BgwYVOfMxcOBAt/FOnDjh1vb6668bSWbNmjVu6zj9W9Gff/5pateubRwOh5k4caKz/fDhwyYoKMhlmxRm06ZNRpK58847XdoffPBBI8msXLnS2Zb/zbC4nnzySRMUFGSysrKMMcb8+OOPRpJZtGiRS7+YmBgTEhJidu3a5dJ++izTmfb5KPjYJycnm/Lly5vff//d2ZadnW3CwsLMHXfc4WwrbLt//vnnRpL573//62w70z4fBWc+0tPTjSTz2muvOdtOnTplOnToYIKDg53bIn/mo0qVKi51vv322y6zM4cPH3bOkJRUYTMRp06dMtWrVzdNmzZ12dfivffeM5LM6NGjnW35s4MjR4485/EKCg0NNS1btnReLvjNfNu2bcbPz8/ccMMNbvttnP58KGqfj4IzH+dyf8eOHeuyzpYtW5rWrVu7tBV87pw6dco0bdrUdO3a1aVdkvHz8zNbtmxxad+6dauRZKZNm+bS3rt3bxMVFXXWfaMKm/3JX9LS0pz9Cm7fnTt3Gn9/fzNhwgSX9W3evNmUK1fOpT1/pmHu3LnOth9++MF5n9auXetsX7p0qdts6ODBg02tWrXcZnAHDBhgQkNDndsw/zFr3Lixy/5Tzz77rJFkNm/e7GwryT4fhcnOzjZNmjQx0dHRJicn55zXc77iaBcPmTp1qpYvX+62NGvW7Ky3DQsL05YtW7Rt27YSj/vBBx/I399f9913n0v7iBEjZIzRkiVLJP11GKMk3XvvvS79hg0bVuS677nnHre207+lnDx5UocOHdJll10mSdq4caNb/zvvvNP5f39/f7Vp00bGGA0ePNjZHhYWposvvlg///xzkbVIf91XSUpKSnJpHzFihCTp/fffP+Ptz2TOnDmKjY11fhNq0KCBWrdurTlz5jj7HDx4UGvWrNEdd9yhunXrutz+XA8R7N+/v3JycvTWW28525YtW6YjR46of//+zrbTt3tOTo5+++031a9fX2FhYYVu9+L44IMPVLNmTQ0cONDZVr58ed133306duyYPv74Y7daK1eu7LzcsWNHSXI+bvn72KxevVqHDx8+p5pOt379eh04cED33nuvy34HsbGxatSoUaGP9+nf+P+u4ODgMx71snjxYuXl5Wn06NHy83N9Kz2X58O53N+Cr9GOHTu6vY5Of+4cPnxYmZmZ6tixY6HPm06dOqlJkyYubQ0bNlT79u1dXgu///67lixZori4uGLd1/bt2xf6/nj6c6+gt956S3l5eerXr58OHTrkXGrWrKkGDRpo1apVLv2Dg4M1YMAA5+WLL75YYWFhaty4sdq3b+9Si/S/560xRgsXLlSvXr1kjHEZq3v37srMzHTbVgkJCS4zogVfC54wdOhQfffdd5oyZYpH9zU6X5S9e+Qj7dq1c9lxLV/lypULnW483dixY3X99derYcOGatq0qa699lrddtttxQouu3btUkREhPNDM1/+VPuuXbuc//r5+Sk6Otql35l2YirYV/rrTSc1NVXz5s1z7iSYLzMz061/wQ/p0NBQBQYGuk0jhoaG6rfffiuyltPvQ8Gaa9asqbCwMOd9Lanvv/9eX331lW6//XZt377d2d65c2dNnTpVWVlZqlSpkvONxROHTudr3ry5GjVqpPnz5zsD2fz581W1alV17drV2e+PP/5QWlqaZs6cqV9++cX5M5hU+HYvjl27dqlBgwZuH5wFnzv5Cj6W+UEkP2gEBAToiSee0IgRI1SjRg1ddtll6tmzp26//XbVrFnznOqT/voQKahRo0b65JNPXNrKlSun2rVrl3icohw7dkzVq1cv8vqffvpJfn5+bh/W56qk9zcwMNDt57zKlSu7Bb/33ntP48eP16ZNm5Sdne1sLyw0FPaal6Tbb79dQ4cO1a5duxQZGak33nhDOTk5uu2224p136pWrapu3boVq2++bdu2yRijBg0aFHp9/k99+WrXru12n0JDQ1WnTh23Nul/z9uDBw/qyJEjmjFjhmbMmFHoWAXf6872Wvi7Jk+erJdeeknjxo3Tdddd55F1nm8IH+eBmJgY/fTTT3r77be1bNky/ec//9EzzzyjF1980WXmwLbCfovt16+fPvvsMz300ENq0aKFgoODlZeXp2uvvVZ5eXlu/f39/YvVJsnlA/VMPH0iotdee02S9MADD+iBBx5wu37hwoVKSEjw6Jin69+/vyZMmKBDhw4pJCRE77zzjgYOHOjybWfYsGGaOXOmhg8frg4dOig0NFQOh0MDBgwodLt7Q3Eet+HDh6tXr15avHixli5dqlGjRiktLU0rV65Uy5YtvVpfQECAW5A6V3v37lVmZuZ5fYRBUY/H6f7v//5PvXv3VkxMjF544QXVqlVL5cuX18yZMzV37ly3/kXtfzFgwAA98MADmjNnjh555BG99tpratOmTaFByVPy8vLkcDi0ZMmSQu9rwX0oitoeZ3ve5r9+br31Vrd9r/IV/CL4d9/DzmTWrFl6+OGHdc899+ixxx772+s7XxE+zhPh4eFKSEhQQkKCjh07ppiYGKWkpDjDR1EfuJGRkfroo4909OhRl9mPH374wXl9/r95eXnasWOHyzeJ07/pn83hw4e1YsUKpaamavTo0c72c/m56Fzk34dt27a57ESZkZGhI0eOOO9rSRhjNHfuXHXp0sXtJylJGjdunObMmaOEhARddNFFkqRvv/32jOssaTjq37+/UlNTtXDhQtWoUUNZWVku08eS9Oabbyo+Pl5PPfWUs+3kyZNuJzIrydiRkZH65ptvlJeX5/KhXfC5U1L16tXTiBEjNGLECG3btk0tWrTQU0895Qx5JalPkrZu3eoyC5Tfdq71FUf+jt35O/wWpl69esrLy9N33313xjPoFvcx8cb9XbhwoQIDA7V06VKXw7xnzpxZovWEh4crNjZWc+bMUVxcnD799NNin0DrXNWrV0/GGEVHR6thw4ZeG6datWoKCQlRbm5uiWdnzuRcviS9/fbbuvPOO3XjjTdq6tSpHqvlfMQ+H+eBgj83BAcHq379+i5TpPnnKyj4YXPdddcpNzdXU6ZMcWl/5pln5HA41KNHD0n/exN94YUXXPo9//zzxa4zP+0XTPfefhPKlz/9WHC8p59+WpLOeOROUT799FPt3LlTCQkJ6tu3r9vSv39/rVq1Svv27VO1atUUExOjV155Rbt373ZZz+nbpKjHqiiNGzfWpZdeqvnz52v+/PmqVauW21E//v7+btv9+eefdzv7YUnGvu6667R//37Nnz/f2fbnn3/q+eefV3BwcInPcXLixAmdPHnSpa1evXoKCQlxeS4XV5s2bVS9enW9+OKLLrdfsmSJvv/++3N6vItj5cqVGjdunKKjoxUXF1dkvz59+sjPz09jx451m30q+HwozuPhjfvr7+8vh8Ph8jzZuXOnFi9eXOJ13Xbbbfruu+/00EMPyd/f3y0ge9qNN94of39/paamuj33jTFn/Zm2uPz9/XXTTTdp4cKFhX6xOHjw4Dmtt2LFiiX6SXTNmjUaMGCAYmJiNGfOHI/N4p2vmPk4DzRp0kSdO3dW69atFR4ervXr1+vNN9/U0KFDnX1at24tSbrvvvvUvXt354u/V69e6tKlix599FHt3LlTzZs317Jly/T2229r+PDhzkMWW7durZtuuknp6en67bffnIfa/vjjj5KKl9IrVaqkmJgYTZo0STk5Obrwwgu1bNky7dixwwtbxV3z5s0VHx+vGTNm6MiRI+rUqZO+/PJLvfrqq+rTp4+6dOlS4nXOmTNH/v7+Rb6x9+7dW48++qjmzZunpKQkPffcc7ryyivVqlUrDRkyRNHR0dq5c6fef/99bdq0SdL/HqtHH31UAwYMUPny5dWrV68znvCqf//+Gj16tAIDAzV48GC3N56ePXtq9uzZCg0NVZMmTfT555/ro48+UpUqVVz6tWjRQv7+/nriiSeUmZmpgIAAde3atdB9F4YMGaLp06dr0KBB2rBhg6KiovTmm286v9UW3I/obH788UddddVV6tevn5o0aaJy5cpp0aJFysjIOKcPqvLly+uJJ55QQkKCOnXqpIEDBzoPPY2Kiir0J7KSWrJkiX744Qf9+eefysjI0MqVK7V8+XJFRkbqnXfeOeMJturXr69HH31U48aNU8eOHXXjjTcqICBA69atU0REhNLS0iT99XyYNm2axo8fr/r166t69epuMxveur+xsbF6+umnde211+qWW27RgQMHNHXqVNWvX1/ffPNNiddVpUoVvfHGG+rRo8cZ94cp6Jdffil05is4OFh9+vQp9Db16tXT+PHjlZycrJ07d6pPnz4KCQnRjh07tGjRIg0ZMkQPPvhgie5DUSZOnKhVq1apffv2uuuuu9SkSRP9/vvv2rhxoz766CP9/vvvJV5n69atNX/+fCUlJalt27YKDg5Wr169Cu27a9cu9e7dWw6HQ3379tUbb7zhcn2zZs2KtQ9g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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGzCAYAAAAFROyYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/2klEQVR4nO3deXiNd/7/8ddJZCObINuIxFaRWr9BpFUUFcQ2tVcJ1Zq2oSVqNF2sbaPo0BplzLR0SoaitLSW2GI6DUXHRSlFbUUSa0JakeX+/eGXM46EColzh+fjus7F+dyf87nf932217m3WAzDMAQAAGAiDvYuAAAA4EYEFAAAYDoEFAAAYDoEFAAAYDoEFAAAYDoEFAAAYDoEFAAAYDoEFAAAYDoEFAAAYDoEFJMKCQnRoEGD7F3GfW/q1KmqUaOGHB0d1ahRI3uXI8m+z33r1q3VunVru8z7dqxZs0aNGjWSq6urLBaLLl68aO+SbIwfP14Wi6XExtu8ebMsFos2b95cYmOWZSW9fmFuBJR7YP78+bJYLNqxY0eR01u3bq169erd9Xy+/vprjR8//q7HeVCsW7dOf/7zn/Xoo49q3rx5euedd27rcb1795bFYtGYMWPueN7ffvutxo8fb5cv2H379mn8+PE6evToPZ/33Th37px69+4tNzc3zZo1S59++qkqVKhQavMreN8W3FxdXRUYGKioqCh98MEHunTpUonN68MPP9T8+fNLbLyyJiQkxGZdX3/r0KGDvcsrNYmJiZoxY8Zt93/nnXfUvHlzValSRa6urqpdu7ZGjBihM2fOlF6RdmThb/GUvvnz52vw4MHavn27mjRpUmh669atdfbsWf3www/WtuzsbDk4OMjJyem25zNs2DDNmjVLPKW359VXX9XUqVP122+/ydnZ+bYek5mZKT8/P/n7+ysvL0/Hjh27o19006ZN0+jRo3XkyBGFhITYTLuT5744li5dql69emnTpk2FtpZcvXpVkm57fdxLa9asUceOHZWUlKR27dqV+vwK3rcTJ05U9erVlZOTo9TUVG3evFlJSUmqVq2avvzySzVo0MD6mNzcXOXm5srV1bVY86pXr54qV65caEtJfn6+rl69KmdnZzk43L+/J0NCQlSxYkWNGjWq0LTAwEC1adNG0rUtKBMmTLhvPuM6d+6sH3744bZ/LPTo0UNVqlRRaGioPDw89OOPP+rvf/+7fH19tWvXrlIN7PZQzt4FoGguLi72LqHYsrKyytQbJD09XW5ubsX6Ml62bJny8vL08ccfq02bNtqyZYtatWpVonXZ87k3YzApkJ6eLkny9vYusTFv5zXbsWNHmx8W8fHx2rhxozp37qyuXbvqxx9/lJubmySpXLlyKleu5D5WHRwcih127qWCAFUSNf7hD3/Q008/XQJV3b+WLVtWqC0yMlI9e/bUypUr1bdvXztUVXru30hext14HEJOTo4mTJig2rVry9XVVZUqVVKLFi2UlJQkSRo0aJBmzZolSTabRwtkZWVp1KhRCgoKkouLi+rUqaNp06YV+iXy22+/6aWXXlLlypXl4eGhrl276uTJk7JYLDa7jwr2Be/bt09PPfWUKlasqBYtWkiSdu/erUGDBqlGjRpydXWVv7+/nnnmGZ07d85mXgVj/PTTT3r66afl5eWlKlWq6M0335RhGDpx4oS6desmT09P+fv767333rutdZebm6tJkyapZs2acnFxUUhIiF577TVlZ2db+1gsFs2bN09ZWVnWdXU7m9gXLlyoJ554Qo8//rjq1q2rhQsXFtlv//796t27t6pUqSI3NzfVqVNHr7/+unW5R48eLUmqXr26df4Fv6Kuf+537Nghi8WiTz75pNA81q5dK4vFolWrVkmSjh07phdffFF16tSRm5ubKlWqpF69etn8Ops/f7569eolSXr88cet8y745V7UMSjp6ekaMmSI/Pz85OrqqoYNGxaq5+jRo7JYLJo2bZrmzp1rXfdNmzbV9u3bbfqmpqZq8ODBqlq1qlxcXBQQEKBu3brd8ldk69atFRMTI0lq2rSpLBaLzftjyZIlCg8Pl5ubmypXrqynn35aJ0+etBlj0KBBcnd31+HDh9WpUyd5eHiof//+N53nrbRp00Zvvvmmjh07pgULFljbb3aMxIIFC9SsWTOVL19eFStWVMuWLbVu3TpJ157vvXv3Kjk52fp8FDwHNzsGpTjLe/LkSXXv3l3u7u6qUqWKXnnlFeXl5dn0nTZtmh555BFVqlRJbm5uCg8P19KlSwsth8Vi0bBhw7Rw4UI9/PDDcnFx0erVqxUSEqJu3boV6n/lyhV5eXnpT3/6022t1zu1YMEC6/rw8fFR3759deLECZs+BbvSd+/erVatWql8+fKqVauWdTmTk5MVERFhfb+uX7++0HxOnjypZ555Rn5+fnJxcdHDDz+sjz/+2KZPwXP22Wef6e2331bVqlXl6uqqtm3b6tChQzb1fPXVV9atsBaLpdDW1NtR8BizHY9VEtiCcg9lZGTo7NmzhdpzcnJ+97Hjx49XQkKCnn32WTVr1kyZmZnasWOHvv/+ez3xxBP605/+pFOnTikpKUmffvqpzWMNw1DXrl21adMmDRkyRI0aNdLatWs1evRonTx5UtOnT7f2HTRokD777DMNGDBAzZs3V3JysqKjo29aV69evVS7dm2988471rCTlJSkn3/+WYMHD5a/v7/27t2ruXPnau/evdq6dWuhD/A+ffqobt26mjx5sr766iu99dZb8vHx0d/+9je1adNG7777rhYuXKhXXnlFTZs2VcuWLW+5rp599ll98skn6tmzp0aNGqVt27YpISFBP/74o5YvXy5J+vTTTzV37lx99913+sc//iFJeuSRR2457qlTp7Rp0ybrl3O/fv00ffp0/fWvf7XZ8rB792499thjcnJy0tChQxUSEqLDhw9r5cqVevvtt/Xkk0/qp59+0r/+9S9Nnz5dlStXliRVqVKl0DybNGmiGjVq6LPPPrN+QRdYvHixKlasqKioKEnS9u3b9e2336pv376qWrWqjh49qtmzZ6t169bat2+fypcvr5YtW+qll17SBx98oNdee01169aVJOu/N/rtt9/UunVrHTp0SMOGDVP16tW1ZMkSDRo0SBcvXtTLL79s0z8xMVGXLl3Sn/70J1ksFk2ZMkVPPvmkfv75Z+suqx49emjv3r0aPny4QkJClJ6erqSkJB0/fvymH9Cvv/666tSpo7lz51p3udSsWVPS/3bFNG3aVAkJCUpLS9P777+v//znP/rvf/9rs8UlNzdXUVFRatGihaZNm6by5csXOb/bMWDAAL322mtat26dnnvuuZv2mzBhgsaPH69HHnlEEydOlLOzs7Zt26aNGzeqffv2mjFjhoYPHy53d3driPXz87vpeMVZ3ry8PEVFRSkiIkLTpk3T+vXr9d5776lmzZp64YUXrP3ef/99de3aVf3799fVq1e1aNEi9erVS6tWrSr0/t+4caM+++wzDRs2TJUrV1b16tX19NNPa8qUKTp//rx8fHysfVeuXKnMzMzb2jKSk5NT5OdjhQoVrFuoivL222/rzTff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LVvq448/1vHjx23GuX6d3Oy5upm6deuqfv36Wrx4sRYvXqyAgIBCZzM5OjoWWu8zZ84sdEppcebdqVMnpaamavHixda23NxczZw5U+7u7sW+Bsyvv/6qK1eu2LTVrFlTHh4eNq/l29WkSRP5+vpqzpw5No9fvXq1fvzxxzt6vm/Hxo0bNWnSJFWvXv2Wpyp3795dDg4OmjhxYqGtWDe+Hm7n+SiN5XV0dJTFYrF5nRw9elQrVqwo9lgDBgzQvn37NHr0aDk6Opb6dTmefPJJOTo6FnnxNuP/n+1SEhwdHdWjRw8tW7asyB8fd3ol1woVKtx2sMjKytKvv/5aqH3ZsmW6cOFCkYcPlHVsQSkjwsLC1Lp1a4WHh8vHx0c7duzQ0qVLNWzYMGuf8PBwSdJLL72kqKgo6wdEly5d9Pjjj+v111/X0aNH1bBhQ61bt05ffPGFRowYYT1dMzw8XD169NCMGTN07tw562nGP/30k6TbS/uenp5q2bKlpkyZopycHP3hD3/QunXrdOTIkVJYK4U1bNhQMTExmjt3ri5evKhWrVrpu+++0yeffKLu3bvr8ccfL/aYCxculKOj400//Lt27arXX39dixYtUlxcnD744AO1aNFC//d//6ehQ4eqevXqOnr0qL766ivt2rVL0v+eq9dff119+/aVk5OTunTpcsuLhvXp00djx46Vq6urhgwZUmhXRefOnfXpp5/Ky8tLYWFhSklJ0fr161WpUiWbfo0aNZKjo6PeffddZWRkyMXFRW3atCnyWIqhQ4fqb3/7mwYNGqSdO3cqJCRES5cutf46vvG4pt/z008/qW3bturdu7fCwsJUrlw5LV++XGlpaXf0Zebk5KR3331XgwcPVqtWrdSvXz/rabchISFF7o4rrtWrV2v//v3Kzc1VWlqaNm7cqKSkJAUHB+vLL7+85UXKatWqpddff12TJk3SY489pieffFIuLi7avn27AgMDlZCQIOna62H27Nl66623VKtWLfn6+hbaQlJayxsdHa2//OUv6tChg5566imlp6dr1qxZqlWrlnbv3l3ssSpVqqQlS5aoY8eOtzw+50YnT54scguau7u7unfvXuRjatasqbfeekvx8fE6evSounfvLg8PDx05ckTLly/X0KFD9corrxRrGW5m8uTJ2rRpkyIiIvTcc88pLCxM58+f1/fff6/1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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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J/J8HnnkEf35z3/WDTfc4OKWql3Y81FF8vLydOLEiTLthYWFF73vxIkTlZaWpvvvv19dunSR3W7Xjh07tGvXLt1888168MEHdezYMa1fv16vvfaa030Nw9Dtt9+uTZs2acSIEerQoYPWrVunxx57TEePHtXs2bMdyw4bNkwrVqzQvffeq65du2rz5s2Kj48/b10DBgxQy5Yt9fTTTzuCzPr16/X9998rMTFRwcHB+vrrr7V48WJ9/fXX2rp1a5kP50GDBql169aaPn263nvvPU2dOlUBAQF68cUX1bt3b82YMUPLli3To48+qs6dO6tHjx4X3Fb333+/Xn31Vd15550aO3astm3bprS0NH3zzTdatWqVJOm1117T4sWL9dlnn+kf//iHJKlbt24X7PfYsWPatGmT44v3rrvu0uzZs/XCCy847TH44osvdMMNN8jT01MjR45UeHi4vvvuO61Zs0bTpk1T//79tX//fr3++uuaPXu2GjZsKElq1KhRmXV26tRJV111lVasWOH48i2xfPlyNWjQQHFxcZJ+Pyzx6aefavDgwWratKkOHTqkhQsXqlevXtqzZ4+uuOIK9ejRQw8//LDmzp2rJ554Qq1bt5Ykx7+l/frrr+rVq5e+/fZbjRo1ShEREVq5cqWGDRum3NxcPfLII07LZ2Rk6NSpU3rwwQdlsVg0c+ZM9e/fX99//708PT0lSQkJCfr66681evRohYeH6/jx41q/fr2OHDly3g/fJ598Uq1atdLixYsdh0GaN28u6fdAlZiYqM6dOystLU05OTl6/vnn9e9//1uff/65056S3377TXFxcerevbueeeYZXXHFFeWuryLuvfdePfHEE/rwww/1wAMPnHe5SZMmaeLEierWrZsmT56sevXqadu2bdq4caP+9Kc/ac6cORo9erR8fHwcATUoKOi8/bnyeIuKihQXF6fo6Gg988wz2rBhg5599lk1b95cf/3rXx3LPf/887r99ts1ZMgQnT17Vm+88YYGDBigd999t8z7f+PGjVqxYoVGjRqlhg0bKiIiQvfcc49mzpypn3/+WQEBAY5l16xZI7vdXqE9GoWFheV+PtavX9+xZ6k806ZN0/jx4zVw4EDdf//9+vHHHzVv3jz16NGjzPY4efKkbrvtNg0ePFgDBgzQwoULNXjwYC1btkzJycn6y1/+orvvvluz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KzOs0pV133rrrcrOztby5csdbb/99pvmzZsnHx8fl69x8ssvvyg/P9+prXnz5vL19XV6LVdUp06d1LhxYy1atMjp/mvXrtU333xTqee7IjZu3KgpU6YoIiLigsN1+/XrJzc3N02ePLnM3qfSr4eKPB/V8Xjd3d1lsVicXieHDh3S6tWrXe7r3nvv1Z49e/TYY4/J3d29TECuav3795e7u7smTZpU5rVvGMZFD9NWlLu7uxISEvTWW2+V+4fFjz/+WKl+69evX+FDolOnTtWqVaucpilTpkiSHn/8ca1atapWXWepItjzcRlo06aNevXqpaioKAUEBGjHjh168803NWrUKMcyUVFRkqSHH35YcXFxjjd/3759deONN+rJJ5/UoUOH1L59e3344Yd6++23lZyc7BiyGBUVpYSEBM2ZM0c//fSTY6jt/v37JVUspfv5+alHjx6aOXOmCgsLdeWVV+rDDz/UwYMHq2GrlNW+fXsNHTpUixcvVm5urnr27KnPPvtMr776qvr166cbb7zR5T6XLVsmd3f3836w33777XryySf1xhtvKCUlRXPnzlX37t113XXXaeTIkYqIiNChQ4f03nvvaffu3ZL+91w9+eSTGjx4sDw9PdW3b98LfngMGjRIEyZMkJeXl0aMGFFm9+ptt92m1157TTabTW3atNGWLVu0YcMGBQYGOi3XoUMHubu7a8aMGcrLy5PValXv3r3LPXdh5MiRevHFFzVs2DDt3LlT4eHhevPNNx1/1ZY+j+hi9u/fr5tuukkDBw5UmzZt5OHhoVWrViknJ6dSX1Senp6aMWOGEhMT1bNnT911112Ooafh4eHlHiJz1dq1a7V371799ttvysnJ0caNG7V+/Xo1a9ZM77zzzgUvsNWiRQs9+eSTmjJlim644Qb1799fVqtV27dvV0hIiNLS0iT9/npYuHChpk6dqhYtWqhx48Zl9mxU1+ONj4/Xc889p1tuuUV33323jh8/rvnz56tFixb64osvXO4rMDBQK1euVJ8+fS54PkxpR48eLXfPl4+Pj/r161fufZo3b66pU6cqNTVVhw4dUr9+/eTr66uDBw9q1apVGjlypB599FGXHsP5TJ8+XZs2bVJ0dLQeeOABtWnTRj///LN27dqlDRs26Oeff3a5z6ioKC1fvlwpKSnq3LmzfHx81Ldv33KXLbmO0rlK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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGzCAYAAACPa3XZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4s0lEQVR4nO3deXRURcLG4bcToBNISAhLQiQmYREQBZQlwrCERQMiy4hsAgPI4ijgsOmIjkAEJ4CMoE7EYQZBZUcExoV9/VRQATkoCAICspggCAkghCX1/eFJD51OIB2SgoTfc04f6Orqe6tu9e1+c++tbocxxggAAMASn5vdAAAAcHshfAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInzcBFFRUerdu/fNbkah9+qrr6pixYry9fVV7dq1b3ZzJN3csY+NjVVsbOxNWXdOLF++XLVr15afn58cDodOnz59s5vkZsyYMXI4HHm2vPXr18vhcGj9+vV5tsyCLK+3L25thI8bNHPmTDkcDm3ZsiXLx2NjY3XPPffc8Ho+/fRTjRkz5oaXc7tYuXKlnnvuOf3hD3/QjBkz9Pe//z1Hz+vcubMcDof++te/5nrdX3zxhcaMGXNTPjx37dqlMWPG6ODBg9bXfSNOnjypzp07y9/fX4mJiXr//fdVokSJfFtfxn6bcfPz81N4eLji4uL0xhtv6MyZM3m2rrfeekszZ87Ms+UVNFFRUW7b+upbq1atbnbz8s2cOXM0ZcqUHNePjY29rbZRkZvdgNvRnj175OPjXe779NNPlZiYSADJobVr18rHx0fTp09XsWLFcvSc1NRUffTRR4qKitLcuXM1fvz4XP0l9sUXXyg+Pl69e/dWcHCw22O5GXtv7Nq1S/Hx8YqNjVVUVJTbYytXrsy39d6or7/+WmfOnNHYsWPVsmVLa+t9+eWXFR0drUuXLikpKUnr16/XkCFD9Nprr+m///2vatas6ar7t7/9Tc8//7zX63jrrbdUpkwZjyNeTZo00fnz53P8+izIateureHDh3uUh4eH34TW2DFnzhx99913GjJkSI6fU6FCBSUkJLiVFdZtRPi4CZxO581ugtfOnTuXr3+J5rXjx4/L39/fqzf2RYsW6cqVK3rnnXfUvHlzbdy4UU2bNs3Tdt3Msb+VP+SOHz8uSR5h7Ubk5DXbunVr1a1b13V/5MiRWrt2rR555BG1a9dO33//vfz9/SVJRYoUUZEiefeW6ePjIz8/vzxbXl5LT0/XxYsX86SNd9xxh3r06JEHrSrcgoKCbpvtxGmXmyDzef9Lly4pPj5eVapUkZ+fn0qXLq1GjRpp1apVkqTevXsrMTFRktwOx2U4d+6chg8froiICDmdTlWtWlWTJk1S5h8sPn/+vJ555hmVKVNGgYGBateunY4ePSqHw+F2RCXj3OuuXbv0+OOPq1SpUmrUqJEkaceOHerdu7cqVqwoPz8/hYWF6YknntDJkyfd1pWxjB9++EE9evRQUFCQypYtq5deeknGGB0+fFjt27dXyZIlFRYWpn/84x852naXL1/W2LFjValSJTmdTkVFRemFF15QWlqaq47D4dCMGTN07tw517bKyWHv2bNn68EHH1SzZs1UvXp1zZ49O8t6u3fvVufOnVW2bFn5+/uratWqevHFF139fvbZZyVJ0dHRrvVnnAa5euy3bNkih8Ohd99912MdK1askMPh0McffyxJOnTokJ5++mlVrVpV/v7+Kl26tDp16uR2emXmzJnq1KmTJKlZs2audWdcU5DVNR/Hjx9X3759FRoaKj8/P9WqVcujPQcPHpTD4dCkSZM0bdo017avV6+evv76a7e6SUlJ6tOnjypUqCCn06ny5curffv21zwNFBsbq169ekmS6tWrJ4fD4bZ/LFy4UHXq1JG/v7/KlCmjHj166OjRo27L6N27twICArR//349/PDDCgwMVPfu3bNd57U0b95cL730kg4dOqRZs2a5yrO7JmHWrFmqX7++ihcvrlKlSqlJkyauo0xRUVHauXOnNmzY4BqPjDHI7poPb/p79OhRdejQQQEBASpbtqxGjBihK1euuNWdNGmSGjZsqNKlS8vf31916tTRBx984NEPh8OhQYMGafbs2apRo4acTqeWLVumqKgotW/f3qP+hQsXFBQUpCeffDJH2zW3Zs2a5doeISEh6tq1qw4fPuxWJ+P09o4dO9S0aVMVL15clStXdvVzw4YNiomJce2vq1ev9ljP0aNH9cQTTyg0NFROp1M1atTQO++841YnY8wWLFigV155RRUqVJCfn59atGihffv2ubXnk08+0aFDh1zjnvlIZHYuX76ss2fPermVCh6OfOSRlJQUnThxwqP80qVL133umDFjlJCQoH79+ql+/fpKTU3Vli1btG3bNj344IN68skndezYMa1atUrvv/++23ONMWrXrp3WrVunvn37qnbt2lqxYoWeffZZHT16VJMnT3bV7d27txYsWKCePXvqgQce0IYNG9SmTZts29WpUydVqVJFf//7311BZtWqVfrxxx/Vp08fhYWFaefOnZo2bZp27typzZs3e7w5d+nSRdWrV9f48eP1ySefaNy4cQoJCdG//vUvNW/eXBMmTNDs2bM1YsQI1atXT02aNLnmturXr5/effddPfbYYxo+fLi+/PJLJSQk6Pvvv9fixYslSe+//76mTZumr776Sv/5z38kSQ0bNrzmco8dO6Z169a5Pni7deumyZMn65///KfbEYMdO3aocePGKlq0qAYMGKCoqCjt379fH330kV555RU9+uij+uGHHzR37lxNnjxZZcqUkSSVLVvWY51169ZVxYoVtWDBAteHb4b58+erVKlSiouLk/T7aYkvvvhCXbt2VYUKFXTw4EFNnTpVsbGx2rVrl4oXL64mTZromWee0RtvvKEXXnhB1atXlyTXv5mdP39esbGx2rdvnwYNGqTo6GgtXLhQvXv31unTp/WXv/zFrf6cOXN05swZPfnkk3I4HJo4caIeffRR/fjjjypatKgkqWPHjtq5c6cGDx6sqKgoHT9+XKtWrdJPP/2U7Zvviy++qKpVq2ratGmu0yCVKlWS9Hug6tOnj+rVq6eEhAQlJyfr9ddf1+eff65vvvnG7UjJ5cuXFRcXp0aNGmnSpEkqXrx4luvLiZ49e+qFF17QypUr1b9//2zrxcfHa8yYMWrYsKFefvllFStWTF9++aXWrl2rhx56SFOmTNHgwYMVEBDgCqihoaHZLs+b/l65ckVxcXGKiYnRpEmTtHr1av3jH/9QpUqV9NRTT7nqvf7662rXrp26d++uixcvat68eerUqZM+/vhjj/1/7dq1WrBggQYNGqQyZcooOjpaPXr00MSJE/Xrr78qJCTEVfejjz5Sampqjv5Sv3TpUpbvjyVKlHAdWcrKK6+8opdeekmdO3dWv3799Msvv+jNN99UkyZNPLbHqVOn9Mgjj6hr167q1KmTpk6dqq5du2r27NkaMmSI/vznP+vxxx/Xq6++qscee0yHDx9WYGCgJCk5OVkPPPCAK4CVLVtWy5YtU9++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uOBWVqlSJQUGBrq9lnOqbt26KleunN5++2235y9btkzff/99rsY7J9auXauxY8cqOjr6mtN1O3ToIB8fH7388sseR58yvx5yMh750V9fX185HA6318nBgwe1ZMkSr5fVs2dP7dq1S88++6x8fX09AnJee/TRR+Xr66v4+HiP174x5rqnaXPK19dXHTt21KJFi7L8w+KXX37J1XJLlCiR41OiqampHvuIMUbjxo2TdO0QXFBx5OMWcPfddys2NlZ16tRRSEiItmzZog8++ECDBg1y1alTp44k6ZlnnlFcXJxr52/btq2aNWumF198UQcPHlStWrW0cuVKLV26VEOGDHFNWaxTp446duyoKVOm6OTJk66ptj/88IOknKX0kiVLqkmTJpo4caIuXbqkO+64QytXrtSBAwfyYat4qlWrlnr16qVp06bp9OnTatq0qb766iu9++676tChg5o1a+b1MmfPni1fX99s39jbtWunF198UfPmzdOwYcP0xhtvqFGjRrr//vs1YMAARUdH6+DBg/rkk0+0fft2Sf8bqxdffFFdu3ZV0aJF1bZt22t+4VWXLl00atQo+fn5qW/fvh6nDx555BG9//77CgoK0t13361NmzZp9erVKl26tFu92rVry9fXVxMmTFBKSoqcTqeaN2+e5bULAwYM0L/+9S/17t1bW7duVVRUlD744APXX7WZryO6nh9++EEtWrRQ586ddffdd6tIkSJavHixkpOTc/VBVbRoUU2YMEF9+vRR06ZN1a1bN9fU06ioqCxPkXlr2bJl2r17ty5fvqzk5GStXbtWq1atUmRkpP773/9e8wu2KleurBdffFFjx45V48aN9eijj8rpdOrrr79WeHi465sq69Spo6lTp2rcuHGqXLmyypUr53FkI7/626ZNG7322mtq1aqVHn/8cR0/flyJiYmqXLmyduzY4fWySpcurYULF6p169bXvB4ms6NHj2Z55CsgIEAdOnTI8jmVKlXSuHHjNHLkSB08eFAdOnRQYGCgDhw4oMWLF2vAgAEaMWKEV33Izvjx47Vu3TrFxMSof//+uvvuu/Xrr79q27ZtWr16da5Oe9SpU0fz58/XsGHDVK9ePQUEBKht27ZZ1t22bZu6deumbt26qXLlyjp//rwWL16szz//XAMGDND9999/o1289VieXVPoXG/KXtOmTa871Xbc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KwoNDXUrDw0N1e7duz3qJyQkKD4+3qM8IiIir5sGALecoCk3uwW3B7azu/zcHmfOnFFQUNA169z0H5YbOXKkhg0b5rqfnp6uX3/9VaVLl5bD4bjh5aempioiIkKHDx9WyZIlb3h5BcHt1mf6W/jdbn2+3for3X59Loz9NcbozJkzCg8Pv27dPA8fZcqUka+vr5KTk93Kk5OTFRYW5lHf6XTK6XS6lQUHB+d1s1SyZMlCM8A5dbv1mf4Wfrdbn2+3/kq3X58LW3+vd8QjQ55fcFqsWDHVqVNHa9ascZWlp6drzZo1atCgQV6vDgAAFDD5ctpl2LBh6tWrl+rWrav69etrypQpOnfunPr06ZMfqwMAAAVIvoSPLl266JdfftGoUaOUlJSk2rVra/ny5R4XodrgdDo1evRoj1M7hdnt1mf6W/jdbn2+3for3X59vt36m5nD5GRODAAAQB7ht10AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFUFMnwkJiYqKipKfn5+iomJ0VdffXXN+gsXLlS1atXk5+ene++9V59++qnb48YYjRo1SuXLl5e/v79atmypvXv35mcXvOJNf//973+rcePGKlWqlEqVKqWWLVt61O/du7ccDofbrVWrVvndDa940+eZM2d69MfPz8+tTmEa49jYWI/+OhwOtWnTxlXnVh7jjRs3qm3btgoPD5fD4dCSJUuu+5z169fr/vvvl9PpVOXKlTVz5kyPOt6+L9jibX8//PBDPfjggypbtqxKliypBg0aaMWKFW51xowZ4zG+1apVy8deeMfbPq9fvz7L13RSUpJbvcIyxlntnw6HQzVq1HDVudXH+EYVuPAxf/58DRs2TKNHj9a2bdtUq1YtxcXF6fjx41nW/+KLL9StWzf17dtX33zzjTp06KAOHTrou+++c9WZOHGi3njjDb399tv68ssvVaJECcXFxenChQu2upUtb/u7fv16devWTevWrdOmTZsUERGhhx56SEePHnWr16pVK/3888+u29y5c210J0e87bP0+1cUX92fQ4cOuT1emMb4ww8/dOvrd999J19fX3Xq1Mmt3q06xufOnVOtWrWUmJiYo/oHDhxQmzZt1KxZM23fvl1DhgxRv3793D6Qc/OascXb/m7cuFEPPvigPv30U23dulXNmjVT27Zt9c0337jVq1Gjhtv4fvbZZ/nR/Fzxts8Z9uzZ49ancuXKuR4rTGP8+uuvu/Xz8OHDCgkJ8diHb+UxvmGmgKlfv74ZOHCg6/6VK1dMeHi4SUhIyLJ+586dTZs2bdzKYmJizJNPPmmMMSY9Pd2EhYWZV1991fX46dOnjdPpNHPnzs2HHnjH2/5mdvnyZRMYGGjeffddV1mvXr1M+/bt87qpecbbPs+YMcMEBQVlu7zCPsaTJ082gYGB5uzZs66yW32MM0gyixcvvmad5557ztSoUcOtrEuXLiYuLs51/0a3oS056W9W7r77bhMfH++6P3r0aFOrVq28a1g+ykmf161bZySZU6dOZVunMI/x4sWLjcPhMAcPHnSVFaQxzo0CdeTj4sWL2rp1q1q2bOkq8/HxUcuWLbVp06Ysn7Np0ya3+pIUFxfnqn/gwAElJSW51QkKClJMTEy2y7QlN/3N7LffftOlS5cUEhLiVr5+/XqVK1dOVatW1VNPPaWTJ0/madtzK7d9Pnv2rCIjIxUREaH27dtr586drscK+xhPnz5dXbt2VYkSJdzKb9Ux9tb19uG82Ia3svT0dJ05c8ZjH967d6/Cw8NVsWJFde/eXT/99NNNamHeqV27tsqXL68HH3xQn3/+uau8sI/x9OnT1bJlS0VGRrqVF8YxzlCgwseJEyd05coVj69pDw0N9Tg3mCEpKema9TP+9WaZtuSmv5n99a9/VXh4uNtO26pVK7333ntas2aNJkyYoA0bNqh169a6cuVKnrY/N3LT56pVq+qdd97R0qVLNWvWLKWnp6thw4Y6cuSIpMI9xl999ZW+++479evXz638Vh5jb2W3D6empur8+fN5sp/cyiZNmqSzZ8+qc+fOrrKYmBjNnDlTy5cv19SpU3XgwAE1btxYZ86cuYktzb3y5cvr7bff1qJFi7Ro0SJFREQoNjZW27Ztk5Q374W3qmPHjmnZsmUe+3BhG+PM8uW3XXBrGD9+vObNm6f169e7XYDZtWtX1//vvfde1axZU5UqVdL69evVokWLm9HUG9KgQQO3X0xu2LChqlevrn/9618aO3bsTWxZ/ps+fbruvfde1a9f3628sI3x7WrOnDmKj4/X0qVL3a5/aN26tev/NWvWVExMjCIjI7VgwQL17dv3ZjT1hlStWlVVq1Z13W/YsKH279+vyZMn6/3337+JLct/7777roKDg9WhQwe38sI2xpkVqCMfZcqUka+vr5KTk93Kk5OTFRYWluVzwsLCrlk/419vlmlLbvqbYdKkSRo/frxWrlypmjVrXrNuxYoVVaZMGe3bt++G23yjbqTPGYoWLar77rvP1Z/COsbnzp3TvHnzcvRGdCuNsbey24dLliwpf3//PHnN3IrmzZunfv36acGCBR6nnTILDg7WXXfdVSDHNzv169d39aewjrExRu+884569uypYsWKXbNuYRvjAhU+ihUrpjp16mjNmjWusvT0dK1Zs8btL9+rNWjQwK2+JK1atcpVPzo6WmFhYW51UlNT9eWXX2a7TFty01/p95kdY8eO1fLly1W3bt3rrufIkSM6efKkypcvnyftvhG57fPVrly5om+//dbVn8I4xtLvU8jT0tLUo0eP667nVhpjb11vH86L18ytZu7cuerTp4/mzp3rNoU6O2fPntX+/fsL5PhmZ/v27a7+FMYxlqQNGzZo3759OfoDotCN8c2+4tVb8+bNM06n08ycOdPs2rXLDBgwwAQHB5ukpCRjjDE9e/Y0zz//vKv+559/booUKWImTZpkvv/+ezN69GhTtGhR8+2337rqjB8/3gQHB5ulS5eaHTt2mPbt25vo6Ghz/vx56/3LzNv+jh8/3hQrVsx88MEH5ueff3bdzpw5Y4wx5syZM2bEiBFm06ZN5sCBA2b16tXm/vvvN1WqVDEXLly4KX3MzNs+x8fHmxUrVpj9+/ebrVu3mq5duxo/Pz+zc+dOV53CNMYZGjVqZLp06eJRfquP8ZkzZ8w333xjvvnmGyPJvPbaa+abb74xhw4dMsYY8/zzz5uePXu66v/444+mePHi5tlnnzXff/+9SUxMNL6+vmb58uWuOtfbhjeTt/2dPXu2KVKkiElMTHTbh0+fPu2qM3z4cLN+/Xpz4MAB8/nnn5uWLVuaMmXKmOPHj1vvX1a87fPkyZPNkiVLzN69e823335r/vKXvxgfHx+zevVqV53CNMYZevToYWJiYrJc5q0+xjeqwIUPY4x58803zZ133mmKFStm6tevbzZv3ux6rGnTpqZXr15u9RcsWGDuuusuU6xYMVOjRg3zySefuD2enp5uXnrpJRMaGmqcTqdp0aKF2bNnj42u5Ig3/Y2MjDSSPG6jR482xhjz22+/mYceesiULVvWFC1a1ERGRpr+/fvfEjvw1bzp85AhQ1x1Q0NDzcMPP2y2bdvmtrzCNMbGGLN7924jyaxcudJjWbf6GGdMq8x8y+hjr169TNOmTT2eU7t2bVOsWDFTsWJFM2PGDI/lXmsb3kze9rdp06bXrG/M71ONy5cvb4oVK2buuOMO06VLF7Nv3z67HbsGb/s8YcIEU6lSJePn52dCQkJMbGysWbt2rcdyC8sYG/P7dH9/f38zbdq0LJd5q4/xjXIYY0w+H1wBAABwKVDXfAAAgIKP8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACr/h86sCMpoLlODwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGzCAYAAADnmPfhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+j0lEQVR4nO3de3zOdePH8ffO0w7XDNssp+UQyzEyyzHU0iI3cmhppNy3exSTOypyykRF5JDubtxFSaWixBzSXeYQ6ZZzRUjbCLtQttk+vz/67bpdNnLN1uXL6/l4fB/s8/18P9/P93ud3tfne7g8jDFGAAAAFuHp7g4AAAC4gvACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfBylapWrZr69Onj7m5c8yZPnqybbrpJXl5eatiwobu7I8m9j32bNm3Upk0bt6z7cnz66adq2LCh/P395eHhoZMnT7q7S05Gjx4tDw+PEmvvs88+k4eHhz777LMSa9PKSnr/wroIL3+CefPmycPDQ1999VWR89u0aaO6dete8Xo++eQTjR49+orbuV6sXLlS//jHP9S8eXPNnTtXEyZMuKzlunfvLg8PDz355JPFXvf69es1evRot3z47ty5U6NHj9aBAwf+9HVfiV9++UXdu3dXmTJlNGPGDL3xxhsKCAgotfUVvG4LJn9/f0VGRiouLk7Tpk3TqVOnSmxdM2fO1Lx580qsPaupVq2a074+f7r77rvd3b1Ss3DhQk2dOtWlZXJycjRhwgTVrl1b/v7+Cg8PV3x8vA4fPlw6nbxKebu7Ayjanj175OnpWrb85JNPNGPGDALMZVqzZo08PT31+uuvy9fX97KWsdvtWrp0qapVq6a33npLEydOLNY3wfXr12vMmDHq06ePQkJCnOYV57F3xc6dOzVmzBi1adNG1apVc5q3cuXKUlvvldq8ebNOnTqlcePGqX379n/aeseOHauoqCjl5uYqPT1dn332mQYPHqyXXnpJH330kerXr++o+8wzz2j48OEur2PmzJkqX758oRG3Vq1a6bfffrvs56eVNWzYUEOHDi1UHhkZ6Ybe/DkWLlyob7/9VoMHD76s+rm5uYqPj9f69ev16KOPqn79+jpx4oQ2btyorKwsVapUqXQ7fBUhvFyl/Pz83N0Fl505c6ZUvwmXtMzMTJUpU8alD4b33ntPeXl5+te//qW2bdvq888/V+vWrUu0X+587K/mD8nMzExJKhT2rsTlPGc7dOigJk2aOP4eMWKE1qxZo3vvvVedOnXSrl27VKZMGUmSt7e3vL1L7m3V09NT/v7+JdZeScvPz1dOTk6J9PHGG2/Ugw8+WAK9unZNmTJF69at0xdffKGmTZu6uzvuZVDq5s6daySZzZs3Fzm/devW5pZbbnEqq1q1qklMTHT8nZOTY0aPHm1q1Khh/Pz8TGhoqGnevLlZuXKlMcaYxMREI6nQVOD06dMmOTnZVKpUyfj6+ppatWqZyZMnm/z8fKf1/vrrr2bQoEGmXLlyJjAw0HTs2NEcPnzYSDLPPvuso96zzz5rJJkdO3aYXr16mZCQENOwYUNjjDHffPONSUxMNFFRUcbPz8+Eh4ebvn37mmPHjjmtq6CNPXv2mISEBBMcHGzKly9vnnnmGZOfn28OHjxoOnXqZIKCgkx4eLh54YUXLmt/5+bmmrFjx5qbbrrJ+Pr6mqpVq5oRI0aYs2fPOuoUta/mzp37h223a9fO3HPPPcYYY+rUqWMeffTRIuvt2rXL3H///aZ8+fLG39/f1KpVyzz11FNO233htH//fmOM82O/efNmI8nMmzev0Do+/fRTI8ksXbrUGGPMgQMHzIABA0ytWrWMv7+/CQ0NNd26dXO0a8z/nosXTmvXrjXG/P5cbN26tdN6MjIyzMMPP2zCwsKMn5+fqV+/fqH+7N+/30gykydPNq+++qpj3zdp0sRs2rTJqe7PP/9s+vTpY2688Ubj6+trIiIiTKdOnZz6eaHWrVsX6vP5r4933nnH3Hrrrcbf39+UK1fOJCQkmMOHDzu1kZiYaAICAsx3331nOnToYAIDA81999130XX+0et2woQJRpKZM2eOo6zgsb3QG2+8YW677TZTpkwZExISYlq2bGlWrFhhjPn98b5w2woeg7Vr1zo9PsXZ3sOHD5v77rvPBAQEmPLly5uhQ4eac+fOOdWdPHmyiY2NNaGhocbf39/ceuutZvHixYW2Q5JJSkoyb775pomOjjbe3t7m/fffN1WrVjWdOnUqVP+3334zwcHBpn///kXuwwJVq1Y18fHxl6xjzKX3b8H+KFu2rOnRo4c5ePCgU52C99lvvvnGtGrVypQpU8ZUr17dsZ2fffaZadq0qeP1mpqaWmg9hw8fNn379jVhYWHG19fXREdHm9dff92pTsFjtmjRIjN+/Hhz4403Gj8/P9O2bVuzb98+p/5c+LhXrVr1otuel5dnIiMjTffu3Y0xv7/PnTlz5g/32bWKkZc/UVZWlo4dO1aoPDc39w+XHT16tFJSUvTII4+oadOmstvt+uqrr7R161bdeeed+utf/6ojR44oNTVVb7zxhtOyxhh16tRJa9euVb9+/dSwYUOtWLFCw4YN008//aQpU6Y46vbp00fvvPOOevfurWbNmmndunWKj4+/aL/uv/9+1axZUxMmTJAxRpKUmpqqH374QX379lVERIR27NihOXPmaMeOHdqwYUOhwyw9evRQnTp1NHHiRH388ccaP368QkND9eqrr6pt27Z6/vnntWDBAj3xxBO67bbb1KpVq0vuq0ceeUTz589Xt27dNHToUG3cuFEpKSnatWuXlixZIkl64403NGfOHG3atEn//Oc/JUm33377Jds9cuSI1q5dq/nz50uSevXqpSlTpuiVV15xGrH473//q5YtW8rHx0f9+/dXtWrV9P3332vp0qV67rnn1KVLF+3du1dvvfWWpkyZovLly0uSKlSoUGidTZo00U033aR33nlHiYmJTvMWLVqksmXLKi4uTtLvh1XWr1+vnj17qlKlSjpw4IBmzZqlNm3aaOfOnbrhhhvUqlUrPfbYY5o2bZqeeuop1alTR5Ic/17ot99+U5s2bfTdd99p4MCBioqK0uLFi9WnTx+dPHlSjz/+uFP9hQsX6tSpU/rrX/8qDw8PTZo0SV26dNEPP/wgHx8fSVLXrl21Y8cODRo0SNWqVVNmZqZSU1N18ODBQoexCjz99NO6+eabNWfOHMdhnOrVq0v6/dyUvn376rbbblNKSooyMjL08ssv68svv9TXX3/tNFJz7tw5xcXFqUWLFnrhhRd0ww03FLm+y9G7d2899dRTWrlypR599NGL1hszZoxGjx6t22+/XWPHjpWvr682btyoNWvW6K677tLUqVM1aNAgBQYG6umnn5YkhYeHX7Q9V7Y3Ly9PcXFxiomJ0QsvvKBVq1bpxRdfVPXq1TVgwABHvZdfflmdOnVSQkKCcnJy9Pbbb+v+++/XsmXLCr3+16xZo3feeUcDBw5U+fLlFRUVpQcffFCTJk3S8ePHFRoa6qi7dOlS2e32yxpRyc3N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6q4X1YZ/XCrtHpgYXyrtAgBwPWHkBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWArhBQAAWIpL4WX06NHy8PBwmmrXru2Yf/bsWSUlJalcuXIKDAxU165dlZGR4dTGwYMHFR8frxtuuEFhYWEaNmyYzp07VzJbAwAArnneri5wyy23aNWqVf9rwPt/TQwZMkQff/yxFi9eLJvNpoEDB6pLly768ssvJUl5eXmKj49XRESE1q9fr59//lkPPfSQfHx8NGHChBLYHAAAcK1zObx4e3srIiKiUHlWVpZef/11LVy4UG3btpUkzZ07V3Xq1NGGDRvUrFkzrVy5Ujt37tSqVasUHh6uhg0baty4cXryySc1evRo+fr6XvkWAQCAa5rL57zs27dPkZGRuummm5SQkKCDBw9KkrZs2aLc3Fy1b9/eUbd27dqqUqWK0tLSJElpaWmqV6+ewsPDHXXi4uJkt9u1Y8eOi64zOztbdrvdaQIAANcnl8JLTEyM5s2bp08//VSzZs3S/v371bJlS506dUrp6eny9fVVSEiI0zLh4eFKT0+XJKWnpzsFl4L5BfMuJiUlRTabzTFVrlzZlW4DAIBriEuHjTp06OD4f/369RUTE6OqVavqnXfeUZkyZUq8cwVGjBih5ORkx992u50AAwDAdeqKLpUOCQlRrVq19N133ykiIkI5OTk6efKkU52MjAzHOTIRERGFrj4q+Luo82gK+Pn5KTg42GkCAADXpysKL6dPn9b333+vihUrqnHjxvLx8dHq1asd8/fs2aODBw8qNjZWkhQbG6vt27crMzPTUSc1NVXBwcGKjo6+kq4AAIDrhEuHjZ544gl17NhRVatW1ZEjR/Tss8/Ky8tLvXr1ks1mU79+/ZScnKzQ0FAFBwdr0KBBio2NVbNmzSRJd911l6Kjo9W7d29NmjRJ6enpeuaZZ5SUlCQ/P79S2UAAAHBtcSm8HD58WL169dIvv/yiChUqqEWLFtqwYYMqVKggSZoyZYo8PT3VtWtXZWdnKy4uTjNnznQs7+XlpWXLlmnAgAGKjY1VQECAEhMTNXbs2JLdKgAAcM3yMMYYd3fCVXa7XTabTVlZWaVy/ku14R+XeJuSdGBifKm0CwCAFZTU5ze/bQQAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACyF8AIAACzlisLLxIkT5eHhocGDBzvKzp49q6SkJJUrV06BgYHq2rWrMjIynJY7ePCg4uPjdcMNNygsLEzDhg3TuXPnrqQrAADgOlHs8LJ582a9+uqrql+/vlP5kCFDtHTpUi1evFjr1q3TkSNH1KVLF8f8vLw8xcfHKycnR+vXr9f8+fM1b948jRo1qvhbAQAArhvFCi+nT59WQkKCXnvtNZUtW9ZRnpWVpddff10vvfSS2rZtq8aNG2vu3Llav369NmzYIElauXKldu7cqTfffFMNGzZUhw4dNG7cOM2YMUM5OTkls1UAAOCaVazwkpSUpPj4eLVv396pfMuWLcrNzXUqr127tqpUqaK0tDRJUlpamurVq6fw8HBHnbi4ONntdu3YsaPI9WVnZ8tutztNAADg+uTt6gJvv/22tm7dqs2bNxeal56eLl9fX4WEhDiVh4eHKz093VHn/OBSML9gXlFSUlI0ZswYV7sKAACuQS6NvBw6dEiPP/64FixYIH9//9LqUyEjRoxQVlaWYzp06NCftm4AAHB1cSm8bNmyRZmZmbr11lvl7e0tb29vrVu3TtOmTZO3t7fCw8OVk5OjkydPOi2XkZGhiIgISVJEREShq48K/i6ocyE/Pz8FBwc7TQAA4PrkUnhp166dtm/frm3btjmmJk2aKCEhwfF/Hx8frV692rHMnj17dPDgQcXGxkqSYmNjtX37dmVmZjrqpKamKjg4WNHR0SW0WQAA4Frl0jkvQUFBqlu3rlNZQECAypUr5yjv16+fkpOTFRoaquDgYA0aNEixsbFq1qyZJOmuu+5SdHS0evfurUmTJik9PV3PPPOMkpKS5OfnV0KbBQAArlUun7D7R6ZMmSJPT0917dpV2dnZiouL08yZMx3zvby8tGzZMg0YMECxsbEKCAhQYmKixo4dW9JdAQAA1yAPY4xxdydcZbfbZbPZlJWVVSrnv1Qb/nGJtylJBybGl0q7AABYQUl9fvPbRgAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFIILwAAwFJcCi+zZs1S/fr1FRwcrODgYMXGxmr58uWO+WfPnlVSUpLKlSunwMBAde3aVRkZGU5tHDx4UPHx8brhhhsUFhamYcOG6dy5cyWzNQAA4JrnUnipVKmSJk6cqC1btuirr75S27Ztdd9992nHjh2SpCFDhmjp0qVavHix1q1bpyNHjqhLly6O5fPy8hQfH6+cnBytX79e8+fP17x58zRq1KiS3SoAAHDN8jDGmCtpIDQ0VJMnT1a3bt1UoUIFLVy4UN26dZMk7d69W3Xq1FFaWpqaNWum5cuX695779WRI0cUHh4uSZo9e7aefPJJHT16VL6+vpe1TrvdLpvNpqysLAUHB19J94tUbfjHJd6mJB2YGF8q7QIAYAUl9fld7HNe8vLy9Pbbb+vMmTOKjY3Vli1blJubq/bt2zvq1K5dW1WqVFFaWpokKS0tTfXq1XMEF0mKi4uT3W53jN4UJTs7W3a73WkCAADXJ5fDy/bt2xUYGCg/Pz/97W9/05IlSxQdHa309HT5+voqJCTEqX54eLjS09MlSenp6U7BpWB+wbyLSUlJkc1mc0yVK1d2tdsAAOAa4XJ4ufnmm7Vt2zZt3LhRAwYMUGJionbu3FkafXMYMWKEsrKyHNOhQ4dKdX0AAODq5e3qAr6+vqpRo4YkqXHjxtq8ebNefvll9ejRQzk5OTp58qTT6EtGRoYiIiIkSREREdq0aZNTewVXIxXUKYqfn5/8/Pxc7SoAALgGXfF9XvLz85Wdna3GjRvLx8dHq1evdszbs2ePDh48qNjYWElSbGystm/frszMTEed1NRUBQcHKzo6+kq7AgAArgMujbyMGDFCHTp0UJUqVXTq1CktXLhQn332mVasWCGbzaZ+/fopOTlZoaGhCg4O1qBBgxQbG6tmzZpJku666y5FR0erd+/emjRpktLT0/XMM88oKSmJkRUAAHBZXAovmZmZeuihh/Tzzz/LZrOpfv36WrFihe68805J0pQpU+Tp6amuXbsqOztbcXFxmjlzpmN5Ly8vLVu2TAMGDFBsbKwCAgKUmJiosWPHluxWAQCAa9YV3+fFHbjPCwAA1uP2+7wAAAC4A+EFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYCuEFAABYikvhJSUlRbfddpuCgoIUFhamzp07a8+ePU51zp49q6SkJJUrV06BgYHq2rWrMjIynOocPHhQ8fHxuuGGGxQWFqZhw4bp3LlzV741AADgmudSeFm3bp2SkpK0YcMGpaamKjc3V3fddZfOnDnjqDNkyBAtXbpUixcv1rp163TkyBF16dLFMT8vL0/x8fHKycnR+vXrNX/+fM2bN0+jRo0qua0CAADXLA9jjCnuwkePHlVYWJjWrVunVq1aKSsrSxUqVNDChQvVrVs3SdLu3btVp04dpaWlqVmzZlq+fLnuvfdeHTlyROHh4ZKk2bNn68knn9TRo0fl6+tbaD3Z2dnKzs52/G2321W5cmVlZWUpODi4uN2/qGrDPy7xNiXpwMT4UmkXAAArsNvtstlsV/z5fUXnvGRlZUmSQkNDJUlbtmxRbm6u2rdv76hTu3ZtValSRWlpaZKktLQ01atXzxFcJCkuLk52u107duwocj0pKSmy2WyOqXLlylfSbQAAYGHFDi/5+fkaPHiwmjdvrrp160qS0tPT5evrq5CQEKe64eHhSk9Pd9Q5P7gUzC+YV5QRI0YoKyvLMR06dKi43QYAABbnXdwFk5KS9O233+qLL74oyf4Uyc/PT35+fqW+HgAAcPUr1sjLwIEDtWzZMq1du1aVKlVylEdERCgnJ0cnT550qp+RkaGIiAhHnQuvPir4u6AOAADAxbgUXowxGjhwoJYsWaI1a9YoKirKaX7jxo3l4+Oj1atXO8r27NmjgwcPKjY2VpIUGxur7du3KzMz01EnNTVVwcHBio6OvpJtAQAA1wGXDhslJSVp4cKF+vDDDxUUFOQ4R8Vms6lMmTKy2Wzq16+fkpOTFRoaquDgYA0aNEixsbFq1qyZJOmuu+5SdHS0evfurUmTJik9PV3PPPOMkpKSODQEAAD+kEvhZdasWZKkNm3aOJXPnTtXffr0kSRNmTJFnp6e6tq1q7KzsxUXF6eZM2c66np5eWnZsmUaMGCAYmNjFRAQoMTERI0dO/bKtgQAAFwXrug+L+5SUteJXwz3eQEAoORdFfd5AQAA+LMRXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKUQXgAAgKV4u7sD15Nqwz8utbYPTIwvtbYBALiaMPICAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAshfACAAAsxeXw8vnnn6tjx46KjIyUh4eHPvjgA6f5xhiNGjVKFStWVJkyZdS+fXvt27fPqc7x48eVkJCg4OBghYSEqF+/fjp9+vQVbQgAALg+uBxezpw5owYNGmjGjBlFzp80aZKmTZum2bNna+PGjQoICFBcXJzOnj3rqJOQkKAdO3YoNTVVy5Yt0+eff67+/fsXfysAAMB1w9vVBTp06KAOHToUOc8Yo6lTp+qZZ57RfffdJ0n697//rfDwcH3wwQfq2bOndu3apU8//VSbN29WkyZNJEnTp0/XPffcoxdeeEGRkZGF2s3OzlZ2drbjb7vd7mq3AQDANaJEz3nZv3+/0tPT1b59e0eZzWZTTEyM0tLSJElpaWkKCQlxBBdJat++vTw9PbVx48Yi201JSZHNZnNMlStXLsluAwAACynR8JKeni5JCg8PdyoPDw93zEtPT1dYWJjTfG9vb4WGhjrqXGjEiBHKyspyTIcOHSrJbgMAAAtx+bCRO/j5+cnPz8/d3QAAAFeBEh15iYiIkCRlZGQ4lWdkZDjmRUREKDMz02n+uXPndPz4cUcdAACAiynR8BIVFaWIiAitXr3aUWa327Vx40bFxsZKkmJjY3Xy5Elt2bLFUWfNmjXKz89XTExMSXYHAABcg1w+bHT69Gl99913jr/379+vbdu2KTQ0VFWqVNHgwYM1fvx41axZU1FRURo5cqQiIyPVuXNnSVKdOnV0991369FHH9Xs2bOVm5urgQMHqmfPnkVeaQQAAHA+l8PLV199pTvuuMPxd3JysiQpMTFR8+bN0z/+8Q+dOXNG/fv318mTJ9WiRQt9+umn8vf3dyyzYMECDRw4UO3atZOnp6e6du2qadOmlcDmAACAa52HMca4uxOustvtstlsysrKUnBwcIm3X234xyXeZmk7MDHe3V0AAOCSSurzm982AgAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAAlkJ4AQAA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Sn5+vpo0aaIJEyZIkho1aqRvv/1Ws2fPJrz8gXfeeUcLFizQwoULdcstt2jbtm0aPHiwIiMj2Xf40+Xm5qp79+4yxmjWrFkuLcthI0nly5eXl5eXMjIynMozMjIUERHhpl5Zy8CBA7Vs2TKtXbtWlSpVcnd3rnpbtmxRZmambr31Vnl7e8vb21vr1q3TtGnT5O3trby8PHd38apVsWJFRUdHO5XVqVNHBw8edFOPrGPYsGEaPny4evbsqXr16ql3794aMmSIUlJS3N01Syn4XOAzo/gKgsuPP/6o1NRUl0ZdJMKLJMnX11eNGzfW6tWrHWX5+flavXq1YmNj3dizq58xRgMHDtSSJUu0Zs0aRUVFubtLltCuXTtt375d27Ztc0xNmjRRQkKCtm3bJi8vL3d38arVvHnzQpfj7927V1WrVnVTj6zj119/laen89u+l5eX8vPz3dQja4qKilJERITTZ4bdbtfGjRv5zLgMBcFl3759WrVqlcqVK+dyGxw2+n/JyclKTExUkyZN1LRpU02dOlVnzpxR37593d21q1pSUpIWLlyoDz/8UEFBQY7jvTabTWXKlHFz765eQUFBhc4LCggIULly5Thf6A8MGTJEt99+uyZMmKDu3btr06ZNmjNnjubMmePurl31OnbsqOeee05VqlTRLbfcoq+//lovvfSSHn74YXd37apz+vRpfffdd46/9+/fr23btik0NFRVqlTR4MGDNX78eNWsWVNRUVEaOXKkIiMj1blzZ/d1+ipxqX1XsWJFdevWTVu3btWyZcuUl5fn+NwIDQ2Vr6/v5a3kiq6BusZMnz7dVKlSxfj6+pqmTZuaDRs2uLtLVz1JRU5z5851d9csh0ulL9/SpUtN3bp1jZ+fn6ldu7aZM2eOu7tkCXa73Tz++OOmSpUqxt/f39x0003m6aefNtnZ2e7u2lVn7dq1Rb63JSYmGmN+v1x65MiRJjw83Pj5+Zl27dqZPXv2uLfTV4lL7bv9+/df9HNj7dq1l70OD2O4tSIAALAOznkBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACWQngBAACW8n9VKvZOCw5t9AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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m3feecelTu42mz9/vpk4caK5+eabjd1uNx07djQHDhxw6U/e7V6zZs1rroMrnTx50nh5eZkhQ4a49bqygpGPEpKWlqYzZ87kK8/Kyrrma8eOHaukpCQ9/PDDat26tdLT07VlyxZt27ZN99xzj/74xz/q5MmTWrlyZb6hOWOMevToobVr12ro0KFq3ry5li9frieffFL/+c9/NHXqVGfdIUOGaMGCBRo0aJDatm2r9evXq1u3boX264EHHlC9evX017/+VcYYSdLKlSv1/fffKz4+XuHh4dqzZ49mzpypPXv2aNOmTfkOU/Tr10+NGjXSpEmT9Nlnn2nixIkKDg7W22+/rY4dO+rll1/W3Llz9cQTT6hVq1aKiYm56rp6+OGH9d5776lPnz4aM2aMNm/erKSkJO3bt0+LFy+WJL3//vuaOXOmvv76a/3jH/+QJN1xxx1XbffkyZNau3at3nvvPUnSgAEDNHXqVP397393GTHYuXOn2rVrJx8fHw0bNky1atXSoUOH9Mknn+ill17S/fffr++++04ffPCBpk6dqpCQEEm/Dqvm1bJlS9WuXVsLFizQ4MGDXZ6bP3++brrpJsXFxUn69bDEV199pf79+6t69eo6cuSIZsyYodjYWO3du1eVKlVSTEyMHn/8cb3++ut65pln1KhRI0ly/pvXzz//rNjYWB08eFDDhw9XVFSUFi5cqCFDhuj8+fP685//7FI/OTlZFy5c0B//+EfZbDZNnjxZ999/v77//nv5+PhIknr37q09e/ZoxIgRqlWrlk6fPq2VK1fq2LFj+Q4D5Xr22WfVoEEDzZw503kYpE6dOpJ+/eUXHx+vVq1aKSkpSampqXrttdf05Zdfavv27S4jJb/88ovi4uJ011136ZVXXlGlSpUKnF9RDBo0SM8884xWrFhx1ePt48aN09ixY3XHHXdo/Pjx8vX11ebNm7VmzRrde++9mjZtmkaMGCF/f389++yzkqSwsLBC23NnebOzsxUXF6c2bdrolVde0apVq/S3v/1NderU0WOPPeas99prr6lHjx4aOHCgLl++rHnz5umBBx7Qp59+mu/9v2bNGi1YsEDDhw9XSEiIoqKi9Pvf/16TJ0/Wjz/+qODgYGfdTz75ROnp6UUa0cjKyirw87Fy5crOkaWCvPTSS3r++efVt29fPfzww/rhhx/0xhtvKCYmJt/6OHfunO677z71799fDzzwgGbMmKH+/ftr7ty5GjlypB599FE9+OCDmjJlivr06aPjx48rICBAkpSamqq2bdvKZrNp+PDhqlq1qpYuXaqhQ4cqPT0936GTSZMmycvLS0888YTS0tI0efJkDRw4UJs3b5b06z6dlpamEydOOD+D/f39r7merjRv3jzl5ORo4MCBbr2uzCjt9FPWFfZr88rpWiMfzZo1u+Yvg4SEhAJ/FSxZssRIMhMnTnQp79Onj7HZbObgwYPGGGO2bt1qJJmRI0e61BsyZEihIx8DBgzIN7+ffvopX9kHH3xgJJkNGzbka+PKX0W//PKLqV69urHZbGbSpEnO8nPnzpmKFSu6rJOC7Nixw0gyDz/8sEv5E088YSSZNWvWOMtyfxkW1SuvvGIqVqxo0tPTjTHGfPfdd0aSWbx4sUu9mJgYExAQYI4ePepSfuUo05QpU1xGO66Ud9snJiYaHx8f8+OPPzrLMjMzTVBQkPnDH/7gLCtovW/cuNFIMv/85z+dZQsXLizw17Qx+Uc+pk2bZiSZOXPmOMsuX75soqOjjb+/v3Nd5I58VKlSxaWfH3/8scvozLlz55wjJO4qaCTi8uXLJjQ01DRp0sT8/PPPzvJPP/3USDIvvPCCsyx3dPDpp58u9vzycjgc5rbbbnM+zvvL/MCBA8bLy8v87ne/M9nZ2S6vvXJ/uOWWW/KNOBmTf+SjOMs7fvx4lzZvu+0206JFC5eyvPvO5cuXTZMmTUzHjh1dyiUZLy8vs2fPHpfy/fv3G0lmxowZLuU9evQwtWrVyjfCmldBoz+5U1JSkrNe3vV75MgR4+3tbV566SWX9nbt2mUqVKjgUp470pCcnOws+/bbb53LtGnTJmf58uXL842GDh061FSrVi3fCG7//v2Nw+FwrsPcbdaoUSOTmZnprPfaa68ZSWbXrl3Osm7durk92nGlFi1amGrVquXbt8oLrnYpIdOnT9fKlSvzTVeesFaYoKAg7dmzRwcOHHB7vp9//rm8vb31+OOPu5SPGTNGxhgtXbpU0q8nLknSn/70J5d6I0aMKLTtRx99NF/Zlb9SLl26pDNnzqht27aSpG3btuWr//DDDzv/7+3trZYtW8oYo6FDhzrLg4KC1KBBA33//feF9kX6dVklafTo0S7luSeyffbZZ1d9/dXMnTtX3bp1c/4Sqlevnlq0aKG5c+c66/zwww/asGGD/vCHP6hGjRoury/uJYL9+vVTVlaWPvroI2fZihUrdP78efXr189ZduV6z8rK0tmzZ1W3bl0FBQUVuN6L4vPPP1d4eLgGDBjgLPPx8dHjjz+uixcvav369fn6etNNNzkft2vXTpKc2y33HJt169bp3LlzxerTlbZs2aLTp0/rT3/6k8t5B926dVPDhg0L3N5X/uK/Xv7+/le96mXJkiXKycnRCy+8kO8k4uLsD8VZ3rzv0Xbt2uV7H12575w7d05paWlq165dgftN+/bt1bhxY5ey+vXrq02bNi7vhR9//FFLly7VwIEDi7Ssbdq0KfDz8cp9L6+PPvpIOTk56tu3r86cOeOcwsPDVa9ePa1du9alvr+/v/r37+983KBBAwUFBalRo0Zq06aNS1+k/+63xhgtWrRI3bt3lzHGZV5xcXFKS0vLt67i4+NdRkTzvheu13fffaetW7eqf//+Hj1BvTRx2KWEtG7d2uXEtVw33XRTgcONVxo/frx69uyp+vXrq0mTJurcubMGDRpUpOBy9OhRRUREOL80c+UOtR89etT5r5eXl6Kiolzq1a1bt9C289aVfv3QGTdunObNm+c8STBXWlpavvp5v6QdDof8/PychyOuLD979myhfblyGfL2OTw8XEFBQc5ldde+ffu0fft2PfTQQzp48KCzPDY2VtOnT1d6eroCAwOdHywlcel0rmbNmqlhw4aaP3++M5DNnz9fISEh6tixo7Pezz//rKSkJM2aNUv/+c9/nIfBpILXe1EcPXpU9erVy/fhlnffyZV3W+YGkdygYbfb9fLLL2vMmDEKCwtT27Ztdd999+mhhx5SeHh4sfon/folklfDhg31xRdfuJRVqFBB1atXd3s+hbl48aJCQ0MLff7QoUPy8vLK92VdXO4ur5+fX77DeTfddFO+4Pfpp59q4sSJ2rFjhzIzM53lBYWGgt7zkvTQQw9p+PDhOnr0qGrWrKmFCxcqKytLgwYNKtKyhYSEuH0V04EDB2SMUb169Qp8PvdQX67q1avnWyaHw6HIyMh8ZdJ/99sffvhB58+f18yZMzVz5swC55X3s+5a74XrlRv0yu0hFxE+bggxMTE6dOiQPv74Y61YsUL/+Mc/NHXqVL311lsuIwdWK+hYbN++ffXVV1/pySefVPPmzeXv76+cnBx17txZOTk5+ep7e3sXqUySyxfq1ZT0jYjmzJkjSRo1apRGjRqV7/lFixYpPj6+ROd5pX79+umll17SmTNnFBAQoH/9618aMGCAy5UVI0aM0KxZszRy5EhFR0fL4XDIZrOpf//+Ba53TyjKdhs5cqS6d++uJUuWaPny5Xr++eeVlJSkNWvW6LbbbvNo/+x2e4n9Sjxx4oTS0tKuGs5LW2Hb40r/+7//qx49eigmJkZvvvmmqlWrJh8fH82aNUvJycn56hd2/kX//v01atQozZ07V88884zmzJmjli1bFhiUSkpOTo5sNpuWLl1a4LLmPYeisPVxrf029/3z+9//Pt+5V7ny/hC83s+wa0lOTlaDBg3UokWLEmnvRkT4uEEEBwcrPj5e8fHxunjxomJiYjR27Fhn+CjsC7dmzZpatWqVLly44DL68e233zqfz/03JydHhw8fdvklceUv/Ws5d+6cVq9erXHjxumFF15wlhfncFFx5C7DgQMHXE6iTE1N1fnz553L6g5jjJKTk9WhQ4d8h6QkacKECZo7d67i4+NVu3ZtSdLu3buv2qa74ahfv34aN26cFi1apLCwMKWnp7sMH0vShx9+qMGDB+tvf/ubs+zSpUv5bmTmzrxr1qypnTt3Kicnx+VLO+++4646depozJgxGjNmjA4cOKDmzZvrb3/7mzPkudM/6dd7o1w5CpRbVtz+FUXuid25J/wWpE6dOsrJydHevXuvegfdom4TTyzvokWL5Ofnp+XLl7tc5j1r1iy32gkODla3bt00d+5cDRw4UF9++WWRb6BVXHXq1JExRlFRUapfv77H5lO1alUFBAQoOzu7RO8xU9wfSZs3b9bBgwc1fvz4EuvLjah8HkwqY/IebvD391fdunVdhkhz71eQ98uma9euys7O1t///neX8qlTp8pms6lLly6S/vsh+uabb7rUe+ONN4rcz9y0nzfde/pDKFfXrl0LnN+rr74qSVe9cqcwX375pY4cOaL4+Hj16dMn39SvXz+tXbtWJ0+eVNWqVRUTE6N3331Xx44dc2nnynVS2LYqTKNGjXTrrbdq/vz5mj9/vqpVq5bvqh9vb+986/2NN95Qdna2S5k78+7atatSUlI0f/58Z9kvv/yiN954Q/7+/m7f4+Snn37SpUuXXMrq1KmjgIAAl325qFq2bKnQ0FC99dZbLq9funSp9u3bV6ztXRRr1qzRhAkTFBUVddVh7169esnLy0vjx4/PN/qUd38oyvbwxPJ6e3vLZrO57CdHjhzRkiVL3G5r0KBB2rt3r5588kl5e3vnC8gl7f7775e3t7fGjRuXb983xlzzMG1ReXt7q3fv3lq0aFGBPyx++OGHYrVbuXLlYh0SzR2RevDBB4s137KCkY8bQOPGjRUbG6sWLVooODhYW7Zs0Ycffqjhw4c76+QOvz3++OOKi4tzvvm7d++uDh066Nlnn9WRI0fUrFkzrVixQh9//LFGjhzpvGSxRYsW6t27t6ZNm6azZ886L7X97rvvJBUtpQcGBiomJkaTJ09WVlaWbr75Zq1YsUKHDx/2wFrJr1mzZho8eLBmzpyp8+fPq3379vr666/13nvvqVevXurQoYPbbc6dO1fe3t6FfrD36NFDzz77rObNm6fRo0fr9ddf11133aXbb79dw4YNU1RUlI4cOaLPPvtMO3bskPTfbfXss8+qf//+8vHxUffu3a96w6t+/frphRdekJ+fn4YOHZrv8MF9992n999/Xw6HQ40bN9bGjRu1atUqValSxaVe8+bN5e3trZdffllpaWmy2+3q2LFjgecuDBs2TG+//baGDBmirVu3qlatWvrwww+dv2rznkd0Ld99953uvvtu9e3bV40bN1aFChW0ePFipaamFuuLysfHRy+//LLi4+PVvn17DRgwwHnpaa1atQo8ROaupUuX6ttvv9Uvv/yi1NRUrVmzRitXrlTNmjX1r3/966o32Kpbt66effZZTZgwQe3atdP9998vu92ub775RhEREUpKSpL06/4wY8YMTZw4UXXr1lVoaGi+kQ1PLW+3bt306quvqnPnznrwwQd1+vRpTZ8+XXXr1tXOnTvdbqtKlSpauHChunTpctXzYfL6z3/+U+DIl7+/v3r16lXga+rUqaOJEycqMTFRR44cUa9evRQQEKDDhw9r8eLFGjZsmJ544gm3lqEwkyZN0tq1a9WmTRs98sgjaty4sX788Udt27ZNq1at0o8//uh2my1atND8+fM1evRotWrVSv7+/te8WVh2drbmz5+vtm3bOj+7yy2rL68pb0riJmMTJ040rVu3NkFBQaZixYqmYcOG5qWXXjKXL1921vnll1/MiBEjTNWqVY3NZnO5JO3ChQtm1KhRJiIiwvj4+Jh69eoVeJOxjIwMk5CQYIKDg42/v7/p1auX8zK6Ky99zb3k7Ycffsi3PCdOnDC/+93vTFBQkHE4HOaBBx4wJ0+eLPRy3bxtFHYJbEHrqSBZWVlm3LhxJioqyvj4+JjIyMh8Nxm72nyudPnyZVOlShXTrl27q9aLiopyueRy9+7dznXg5+dnGjRoYJ5//nmX10yYMMHcfPPNxsvLq9CbjF3pwIEDzssPv/jii3zPnzt3zsTHx5uQkBDj7+9v4uLizLfffltge//zP/9jateubby9vYt0k7Hcdn19fc2tt96a74ZsV95kLK8rt/uZM2dMQkKCadiwoalcubJxOBymTZs2ZsGCBflXah5Xex/Nnz/f3Hbbbc4b8F3tpltFlfcS+dwbot1zzz3mtddec15mfKXCboL17rvvOvt30003mfbt27vcxColJcV069bNBAQEFOkmY9ezvAX18Z133jH16tUzdrvdNGzY0MyaNavAevr/m4xdzZ/+9Kd8l7Rey9Uutb3yUtTC1u+iRYvMXXfdZSpXrmwqV65sGjZsaBISEsz+/fuddQr7/CjsBmcFLWtqaqpJSEgwkZGRxsfHx4SHh5u7777b5UZzudss703act8jV753Ll68aB588EETFBRU5JuM5d5c8PXXX79m3bLOZkwJnSGDMmnHjh267bbbNGfOnHJ9ZjWA6zdq1Ci98847SklJua6buAGc8/Eb8vPPP+crmzZtmry8vK55Z1EAv22XLl3SnDlz1Lt3b4IHrhvnfPyGTJ48WVu3blWHDh1UoUIFLV26VEuXLtWwYcPyXQsPANKv97hYtWqVPvzwQ509ezbfbfeB4iB8/IbccccdWrlypSZMmKCLFy+qRo0aGjt2rPNvTgBAXnv37tXAgQMVGhqq119//aqXFQNFxTkfAADAUpzzAQAALEX4AAAAlrrhzvnIycnRyZMnFRAQUOJ/wwMAAHiGMUYXLlxQRETENf/O0g0XPk6ePMmVFwAAlFHHjx+/5l+YvuHCR+4tnY8fP67AwMBS7g0AACiK9PR0RUZGFulPM9xw4SP3UEtgYCDhAwCAMqYop0xwwikAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApSqUdgfKi1pPf+axto9M6uaxtgEAsBojHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWcit8zJgxQ02bNlVgYKACAwMVHR2tpUuXOp+PjY2VzWZzmR599NES7zQAACi7KrhTuXr16po0aZLq1asnY4zee+899ezZU9u3b9ctt9wiSXrkkUc0fvx452sqVapUsj0GAABlmlvho3v37i6PX3rpJc2YMUObNm1yho9KlSopPDy85HoIAADKlWKf85Gdna158+YpIyND0dHRzvK5c+cqJCRETZo0UWJion766aertpOZman09HSXCQAAlF9ujXxI0q5duxQdHa1Lly7J399fixcvVuPGjSVJDz74oGrWrKmIiAjt3LlTf/nLX7R//3599NFHhbaXlJSkcePGFX8JAABAmWIzxhh3XnD58mUdO3ZMaWlp+vDDD/WPf/xD69evdwaQK61Zs0Z33323Dh48qDp16hTYXmZmpjIzM52P09PTFRkZqbS0NAUGBrq5OKWn1tOfeaztI5O6eaxtAABKQnp6uhwOR5G+v90e+fD19VXdunUlSS1atNA333yj1157TW+//Xa+um3atJGkq4YPu90uu93ubjcAAEAZdd33+cjJyXEZubjSjh07JEnVqlW73tkAAIBywq2Rj8TERHXp0kU1atTQhQsXlJycrHXr1mn58uU6dOiQkpOT1bVrV1WpUkU7d+7UqFGjFBMTo6ZNm3qq/wAAoIxxK3ycPn1aDz30kE6dOiWHw6GmTZtq+fLluueee3T8+HGtWrVK06ZNU0ZGhiIjI9W7d28999xznuo7AAAog9wKH++8806hz0VGRmr9+vXX3SEAAFC+8bddAACApQgfAADAUoQPAABgKbfv81HWefJmYAAA4NoY+QAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4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nHUaNmyoGjVqaOPGjQW2kZmZqfT0dJcJAACUX8UOHzk5ORo5cqTuvPNONWnSRJKUkpIiX19fBQUFudQNCwtTSkpKge0kJSXJ4XA4p8jIyOJ2CQAAlAHFDh8JCQnavXu35s2bd10dSExMVFpamnM6fvz4dbUHAABubG6d85Fr+PDh+vTTT7VhwwZVr17dWR4eHq7Lly/r/PnzLqMfqampCg8PL7Atu90uu91enG4AAIAyyK2RD2OMhg8frsWLF2vNmjWKiopyeb5Fixby8fHR6tWrnWX79+/XsWPHFB0dXTI9BgAAZZpbIx8JCQlKTk7Wxx9/rICAAOd5HA6HQxUrVpTD4dDQoUM1evRoBQcHKzAwUCNGjFB0dDRXugAAAEluho8ZM2ZIkmJjY13KZ82apSFDhkiSpk6dKi8vL/Xu3VuZmZmKi4vTm2++WSKdBQAAZZ9b4cMYc806fn5+mj59uqZPn17sTgEAgPKLv+0CAAAsRfgAAACWInwAAABLFes+H7BWrac/81jbRyZ181jbAAAUhJEPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApt8PHhg0b1L17d0VERMhms2nJkiUuzw8ZMkQ2m81l6ty5c0n1FwAAlHFuh4+MjAw1a9ZM06dPL7RO586dderUKef0wQcfXFcnAQBA+VHB3Rd06dJFXbp0uWodu92u8PDwYncKAACUXx4552PdunUKDQ1VgwYN9Nhjj+ns2bOF1s3MzFR6errLBAAAyq8SDx+dO3fWP//5T61evVovv/yy1q9fry5duig7O7vA+klJSXI4HM4pMjKypLsEAABuIG4fdrmW/v37O/9/6623qmnTpqpTp47WrVunu+++O1/9xMREjR492vk4PT2dAAIAQDnm8Utta9eurZCQEB08eLDA5+12uwIDA10mAABQfnk8fJw4cUJnz55VtWrVPD0rAABQBrh92OXixYsuoxiHDx/Wjh07FBwcrODgYI0bN069e/dWeHi4Dh06pKeeekp169ZVXFxciXYcAACUTW6Hjy1btqhDhw7Ox7nnawwePFgzZszQzp079d577+n8+fOKiIjQvffeqwkTJshut5dcrwEAQJnldviIjY2VMabQ55cvX35dHQIAAOUbf9sFAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKUIHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGCpCqXdAZSuWk9/5pF2j0zq5pF2AQBlHyMfAADAUoQPAABgKcIHAACwFOEDAABYyu3wsWHDBnXv3l0RERGy2WxasmSJy/PGGL3wwguqVq2aKlasqE6dOunAgQMl1V8AAFDGuR0+MjIy1KxZM02fPr3A5ydPnqzXX39db731ljZv3qzKlSsrLi5Oly5duu7OAgCAss/tS227dOmiLl26FPicMUbTpk3Tc889p549e0qS/vnPfyosLExLlixR//79r6+3AACgzCvRcz4OHz6slJQUderUyVnmcDjUpk0bbdy4scDXZGZmKj093WUCAADlV4mGj5SUFElSWFiYS3lYWJjzubySkpLkcDicU2RkZEl2CQAA3GBK/WqXxMREpaWlOafjx4+XdpcAAIAHlWj4CA8PlySlpqa6lKempjqfy8tutyswMNBlAgAA5VeJho+oqCiFh4dr9erVzrL09HRt3rxZ0dHRJTkrAABQRrl9tcvFixd18OBB5+PDhw9rx44dCg4OVo0aNTRy5EhNnDhR9erVU1RUlJ5//nlFRESoV69eJdlvAABQRrkdPrZs2aIOHTo4H48ePVqSNHjwYM2ePVtPPfWUMjIyNGzYMJ0/f1533XWXli1bJj8/v5LrNQAAKLNsxhhT2p24Unp6uhwOh9LS0jxy/oen/oQ8XB2Z1K20uwAAsJA739+lfrULAAD4bSF8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBSbv9VW6AoPPkH/PijdQBQtjHyAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsxR1OUeZ46u6pnrxzalnsMwB4CiMfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYq8fAxduxY2Ww2l6lhw4YlPRsAAFBGVfBEo7fccotWrVr135lU8MhsAABAGeSRVFChQgWFh4d7omkAAFDGeeScjwMHDigiIkK1a9fWwIEDdezYsULrZmZmKj093WUCAADlV4mHjzZt2mj27NlatmyZZsyYocOHD6tdu3a6cOFCgfWTkpLkcDicU2RkZEl3CQAA3EBKPHx06dJFDzzwgJo2baq4uDh9/vnnOn/+vBYsWFBg/cTERKWlpTmn48ePl3SXAADADcTjZ4IGBQWpfv36OnjwYIHP2+122e12T3cDAADcIDx+n4+LFy/q0KFDqlatmqdnBQAAyoASDx9PPPGE1q9fryNHjuirr77S7373O3l7e2vAgAElPSsAAFAGlfhhlxMnTmjAgAE6e/asqlatqrvuukubNm1S1apVS3pWAACgDCrx8DFv3rySbhIAAJQj/G0XAABgKcIHAACwFH90Bfh/tZ7+rLS74DZP9vnIpG4ea9tTPLU+yuK68CT2O1wvRj4AAIClCB8AAMBShA8AAGApwgcAALAU4QMAAFiK8AEAACxF+AAAAJYifAAAAEsRPgAAgKW4wykAlCLuForfIkY+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLcZMxAAXy5M2vgMJ4ar/z5A3XymKfSxsjHwAAwFKEDwAAYCnCBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUtzhFADKKe5SW7Z5cvuV9t1TGfkAAACWInwAAABLET4AAIClCB8AAMBSHgsf06dPV61ateTn56c2bdro66+/9tSsAABAGeKR8DF//nyNHj1aL774orZt26ZmzZopLi5Op0+f9sTsAABAGeKR8PHqq6/qkUceUXx8vBo3bqy33npLlSpV0rvvvuuJ2QEAgDKkxO/zcfnyZW3dulWJiYnOMi8vL3Xq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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGzCAYAAAAxPS2EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGT0lEQVR4nO3deVyU5f7/8feAsigwiArIERGXVNzDRCp3Ew0tv5lpueCWxw5WipnRYi4VLpVamebppH0Tj0ullR4X3L8lrsVxS1NzKwUslVFTRLh/f5wfcxxBExwab3o9H4956Nz3Ndf9uWYG5s19X/c9FsMwDAEAAJiIm6sLAAAAKCoCDAAAMB0CDAAAMB0CDAAAMB0CDAAAMB0CDAAAMB0CDAAAMB0CDAAAMB0CDAAAMB0CjElVr15d/fv3d3UZpd6UKVNUo0YNubu7q0mTJq4uR5JrX/s2bdqoTZs2Ltn2rVi5cqWaNGkiLy8vWSwWnTt3ztUlORg7dqwsFovT+tuwYYMsFos2bNjgtD7NzNnPL+5sBJg7wNy5c2WxWLRjx45C17dp00YNGjS47e3861//0tixY2+7nz+L1atX6/nnn9d9992nOXPm6I033rilxz322GOyWCwaPXp0sbe9efNmjR071iUfwPv27dPYsWN19OjRP3zbt+PXX3/VY489Jm9vb82YMUOffPKJypcvX2Lby/+5zb95eXkpJCREMTExeuedd3T+/Hmnbev999/X3Llzndaf2VSvXt3hub721qlTJ1eXV2Lmz5+vadOm3XL7vLw8zZo1S02aNJGPj4+CgoLUuXNnbd68ueSKdCUDLjdnzhxDkrF9+/ZC17du3dqoX7++w7LLly8bV65cKdJ24uPjDV7yWzd69GjDzc3NyM7OvuXHZGVlGV5eXkb16tWN0NBQIy8vr1jbnjJliiHJOHLkSIF1xXnti2Lx4sWGJGP9+vUF1mVnZxfp+fgjrVixwpBkpKSk/CHby/+5HT9+vPHJJ58YH330kfHGG28YHTt2NCwWixEWFmb8+9//dnhMTk6OcenSpSJvq379+kbr1q0LLM/NzTUuXbpk5ObmFncYphAWFmY0adLE+OSTTwrc1q5da2/36quvlqrfcbGxsUZYWNgtt09ISDAkGX369DE++OADY9KkSUaNGjWMMmXKGFu3bi25Ql2kjOuiE26Hp6enq0sososXL5boX8TOlpmZKW9vb3l4eNzyYz777DPl5ubqo48+Urt27bRp0ya1bt3aqXW58rUvynPxR8vMzJQk+fv7O63PW3nPdu7cWc2aNbPfT0xM1Lp169SlSxc99NBD+v777+Xt7S1JKlOmjMqUcd6vXTc3N3l5eTmtP2fLy8vTlStXnFLjX/7yF/Xp08cJVZVOV69e1cyZM/Xoo4/qk08+sS/v0aOHatSooeTkZDVv3tyFFTofh5BM6vp5EDk5ORo3bpxq164tLy8vVaxYUffff79SUlIkSf3799eMGTMkyWH3a76LFy9q5MiRCg0Nlaenp+rUqaM333xTxnVfVn7p0iU988wzqlSpknx9ffXQQw/p559/lsVicTg8lX8set++fXriiSdUoUIF3X///ZKkXbt2qX///qpRo4a8vLwUHBysgQMH6tdff3XYVn4fP/zwg/r06SOr1arKlSvrlVdekWEYOnHihB5++GH5+fkpODhYb7311i09d1evXtWECRNUs2ZNeXp6qnr16nrxxReVnZ1tb2OxWDRnzhxdvHjR/lzdyi785ORkPfDAA2rbtq3q1aun5OTkQtvt379fjz32mCpXrixvb2/VqVNHL730kn3co0aNkiSFh4fbt59/SOfa137Hjh2yWCz6+OOPC2xj1apVslgsWrZsmSTp2LFj+tvf/qY6derI29tbFStWVI8ePRwOFc2dO1c9evSQJLVt29a+7fw5FoXNgcnMzNSgQYMUFBQkLy8vNW7cuEA9R48elcVi0ZtvvqnZs2fbn/t77rlH27dvd2ibnp6uAQMGqGrVqvL09FSVKlX08MMP3/SQVps2bRQXFydJuueee2SxWBx+PhYvXqzIyEh5e3urUqVK6tOnj37++WeHPvr37y8fHx8dPnxYDz74oHx9fdW7d+8bbvNm2rVrp1deeUXHjh3TvHnz7MtvNEdj3rx5at68ucqVK6cKFSqoVatWWr16taT/vN579+7Vxo0b7a9H/mtwozkwRRnvzz//rG7dusnHx0eVK1fWc889p9zcXIe2b775pu69915VrFhR3t7eioyM1KefflpgHBaLRcOGDVNycrLq168vT09PrVixQtWrV9fDDz9coP3ly5dltVr117/+9Zae1+KaN2+e/fkICAhQr169dOLECYc2+Yfqd+3apdatW6tcuXKqVauWfZwbN25UVFSU/ed1zZo1Bbbz888/a+DAgQoKCpKnp6fq16+vjz76yKFN/mu2aNEivf7666pataq8vLzUvn17HTp0yKGe5cuX69ixY/bXvXr16jccY05Oji5duqSgoCCH5YGBgXJzc7OH6NKEPTB3kKysLP3yyy8Flufk5PzuY8eOHaukpCQNHjxYzZs3l81m044dO/Ttt9/qgQce0F//+ledPHlSKSkpDulckgzD0EMPPaT169dr0KBBatKkiVatWqVRo0bp559/1tSpU+1t+/fvr0WLFqlv375q0aKFNm7cqNjY2BvW1aNHD9WuXVtvvPGGPQylpKToxx9/1IABAxQcHKy9e/dq9uzZ2rt3r7Zs2VLgF3zPnj1Vr149TZw4UcuXL9drr72mgIAAffDBB2rXrp0mTZqk5ORkPffcc7rnnnvUqlWrmz5XgwcP1scff6xHH31UI0eO1NatW5WUlKTvv/9eS5YskSR98sknmj17trZt26YPP/xQknTvvffetN+TJ09q/fr19g/vxx9/XFOnTtV7773nsOdi165datmypcqWLashQ4aoevXqOnz4sL766iu9/vrreuSRR/TDDz/on//8p6ZOnapKlSpJkipXrlxgm82aNVONGjW0aNEi+wd4voULF6pChQqKiYmRJG3fvl2bN29Wr169VLVqVR09elQzZ85UmzZttG/fPpUrV06tWrXSM888o3feeUcvvvii6tWrJ0n2f6936dIltWnTRocOHdKwYcMUHh6uxYsXq3///jp37pyeffZZh/bz58/X+fPn9de//lUWi0WTJ0/WI488oh9//FFly5aVJHXv3l179+7V008/rerVqyszM1MpKSk6fvz4DX+Bv/TSS6pTp45mz56t8ePHKzw8XDVr1pT0n1A2YMAA3XPPPUpKSlJGRoamT5+ub775Rt99953DHpurV68qJiZG999/v958802VK1eu0O3dir59++rFF1/U6tWr9eSTT96w3bhx4zR27Fjde++9Gj9+vDw8PLR161atW7dOHTt21LRp0/T000/Lx8fHHnKv/5C6VlHGm5ubq5iYGEVFRenNN9/UmjVr9NZbb6lmzZp66qmn7O2mT5+uhx56SL1799aVK1e0YMEC9ejRQ8uWLSvw879u3TotWrRIw4YNU6VKlRQeHq4+ffpo8uTJOnPmjAICAuxtv/rqK9lstlvas5KTk1Po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6Pby/2q52RlVN/LNN9/o6NGjGjBggB599NECt549e2r9+vU6efKkKleurFatWumjjz7S8ePHHfq59jm50Wt1I/Xq1VPDhg21cOFCLVy4UFWqVClwNpa7u3uB5/3dd98t8AuvKNt+8MEHlZ6eroULF9qXXb16Ve+++658fHyKfA2c3377TZcvX3ZYVrNmTfn6+jq8l29Vs2bNFBgYqFmzZjk8fsWKFfr++++L9XrfinXr1mnChAkKDw+/6anY3bp1k5ubm8aPH19gL9j174dbeT1KYrzu7u6yWCwO75OjR49q6dKlRe6rb9++2rdvn0aNGiV3d/cCIdvZHnnkEbm7u2vcuHEF3vuGYfzuIedb5e7uru7du+uzzz4r9I+T06dPF6vf8uXL3/Lh3fyAtmDBAofl3377rQ4cOFDiey9dgT0wpURERITatGmjyMhIBQQEaMeOHfr00081bNgwe5vIyEhJ0jPPPKOYmBj7L5CuXbuqbdu2eumll3T06FE1btxYq1ev1hdffKHhw4fbT0eNjIxU9+7dNW3aNP3666/206h/+OEHSbf214Kfn59atWqlyZMnKycnR3/5y1+0evVqHTlypASelYIaN26suLg4zZ49W+fOnVPr1q21bds2ffzxx+rWrZvatm1b5D6Tk5Pl7u5+ww+Hhx56SC+99JIWLFighIQEvfPOO7r//vt19913a8iQIQoPD9fRo0e1fPlypaWlSfrva/XSSy+pV69eKlu2rLp27XrTi6r17NlTY8aMkZeXlwYNGlTgUEiXLl30ySefyGq1KiIiQqmpqVqzZo0qVqzo0K5JkyZyd3fXpEmTlJWVJU9PT7Vr167QuRxDhgzRBx98oP79+2vnzp2qXr26Pv30U/tf19fPq/o9P/zwg9q3b6/HHntMERERKlOmjJYsWaKMjIxifdiVLVtWkyZN0oABA9S6dWs9/vjj9tOKq1evXujhvqJasWKF9u/fr6tXryojI0Pr1q1TSkqKwsLC9OWXX970Im61atXSSy+9pAkTJqhly5Z65JFH5Onpqe3btyskJERJSUmS/vN+mDlzpl577TXVqlVLgYGBBfawlNR4Y2Nj9fbbb6tTp0564oknlJmZqRkzZqhWrVratWtXkfuqWLGiFi9erM6dO990ftD1fv7550L3wPn4+Khbt26FPqZmzZp67bXXlJiYqKNHj6pb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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGzCAYAAAAFROyYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCTUlEQVR4nO3de1xVVcL/8S93COQgKiDlBc1C0tLUkC5axkiGmo+Y2pCRWc44YHnJSSvNO2oXTUvNmVKf1Cd17DLpeEEtnZLUKBvzlk0qmgNYCkctAWH9/ujHGY+geRA6G/28X6/90rP22muvvfe5fM86e288jDFGAAAAFuLp7g4AAACcj4ACAAAsh4ACAAAsh4ACAAAsh4ACAAAsh4ACAAAsh4ACAAAsh4ACAAAsh4ACAAAsh4BiUY0bN9ajjz7q7m5c8V588UU1adJEXl5eatWqlbu7I8m9x/7uu+/W3Xff7ZZ1X4o1a9aoVatW8vf3l4eHh/Lz893dJSdjx46Vh4dHlbX38ccfy8PDQx9//HGVtVmTVfX+hbURUH4DCxYskIeHhz7//PMK5999991q0aLFZa/nH//4h8aOHXvZ7Vwt1q1bpz//+c+64447NH/+fE2ePPmSluvdu7c8PDz0zDPPVHrdW7Zs0dixY93yAbt7926NHTtWBw8e/M3XfTl+/PFH9e7dWwEBAXr99df19ttvKzAwsNrWV/a6LZv8/f0VGRmphIQEzZw5UydPnqyydc2ePVsLFiyosvZqmsaNGzvt63On++67z93dqzZLlizRjBkzLrl+cXGxxo0bpyZNmsjPz09NmjTRxIkTdfbs2errpDsZVLv58+cbSWb79u0Vzu/YsaO56aabnMrOnDljioqKXFpPamqq4ZBeumeeecZ4enqawsLCS16moKDA+Pv7m8aNG5sGDRqY0tLSSq37xRdfNJLMgQMHys2rzLF3xfLly40k89FHH5WbV1hY6NL++C2tXr3aSDIZGRm/yfrKXrfjx483b7/9tnnrrbfM5MmTTefOnY2Hh4dp1KiR+eqrr5yWKS4uNj///LPL67rppptMx44dy5WXlJSYn3/+2ZSUlFR2M2qERo0amVatWpm333673LRhwwZHvRdeeOGKeo9LTEw0jRo1uuT6vXv3Nh4eHmbAgAFmzpw5JiUlxUgyTzzxRPV10o283ReNcDF+fn7u7oLLTp8+Xa3faKtaXl6eAgIC5Ovre8nLrFixQiUlJXrrrbfUqVMnbd68WR07dqzSfrnz2LuyL35reXl5kqSQkJAqa/NSnrNdunRR27ZtHY9HjRqljRs3qmvXrurevbv27NmjgIAASZK3t7e8vavubdXT01P+/v5V1l5VKy0tVVFRUZX08dprr9XDDz9cBb26Mm3fvl3Lli3T6NGjNX78eEnSH//4R9WtW1evvPKK0tLSdPPNN7u5l1XM3QnpalCZEZRGjRqZlJQUx+OioiIzduxYc/311xs/Pz8TGhpq7rjjDrNu3TpjjHEk6fOnMqdOnTLDhg0z1113nfH19TU33HCDefHFF8uNAPz0009m8ODBpk6dOiYoKMh069bNHDlyxEgyL7zwgqNe2TeZXbt2mYceesiEhISYVq1aGWOM+eqrr0xKSoqJiooyfn5+Jjw83PTv39/88MMPTusqa2Pfvn0mOTnZBAcHm7p165rnn3/elJaWmuzsbNO9e3dTq1YtEx4ebl566aVL2t/FxcVm/PjxpkmTJsbX19c0atTIjBo1ypw5c8ZRp6J9NX/+/F9t+9577zX333+/McaY5s2bX/Cby549e8yDDz5o6tata/z9/c0NN9xgnn32WaftPn8qG00599hv377dSDILFiwot441a9YYSebDDz80xhhz8OBBM2jQIHPDDTcYf39/Exoaanr16uU0SlP2XDx/KhtN6dixY7lv8rm5ueaxxx4zYWFhxs/Pz9x8883l+nPgwAEjybz44ovmjTfecOz7tm3bmm3btjnV/c9//mMeffRRc+211xpfX18TERFhunfvXuFoUpmOHTuW6/O5r49ly5aZW2+91fj7+5s6deqY5ORkc+TIEac2UlJSTGBgoPn2229Nly5dTFBQkHnggQcuuM5fe91OnjzZSDLz5s1zlF3oG/7bb79t2rVrZwICAkxISIi56667zNq1a40xvxzv87et7Bh89NFHFY52ubK9R44cMQ888IAJDAw0devWNcOHDzdnz551qvviiy+auLg4Exoaavz9/c2tt95qli9fXm47JJnU1FSzaNEiExMTY7y9vc27775rGjVqZLp3716u/s8//2yCg4PNwIEDK9yHZRo1amQSExMvWseYi+/fsv1Ru3Zt06dPH5Odne1Up+x99quvvjIdOnQwAQEBpmnTpo7t/Pjjj81tt93meL1WNFJ35MgR079/fxMWFmZ8fX1NTEyMefPNN53qlB2zpUuXmokTJ5prr73W+Pn5mU6dOpn9+/c79ef8436x0ZSXX37Z8Z57rrL3iLL3lysJIyi/oYKCAv3www/lyouLi3912bFjxyo9PV2PP/64brvtNtntdn3++ef64osv9Lvf/U5/+MMfdPToUWVkZOjtt992WtYYo+7du+ujjz7SgAED1KpVK61du1YjRozQ999/r+nTpzvqPvroo1q2bJn69eun9u3ba9OmTUpMTLxgvx588EE1a9ZMkydPljFGkpSRkaHvvvtO/fv3V0REhHbt2qV58+Zp165d+uyzz8qd5NanTx81b95cU6ZM0apVqzRx4kSFhobqjTfeUKdOnTR16lQtXrxYTz/9tNq1a6cOHTpcdF89/vjjWrhwoXr16qXhw4dr69atSk9P1549e/Tee+9Jkt5++23NmzdP27Zt01//+ldJ0u23337Rdo8ePaqPPvpICxculCQ99NBDmj59ul577TWnkYd//etfuuuuu+Tj46OBAweqcePG+ve//60PP/xQkyZNUs+ePfXNN9/o//7v/zR9+nTVrVtXklSvXr1y62zbtq2aNGmiZcuWKSUlxWne0qVLVbt2bSUkJEj65RvWli1b1LdvX1133XU6ePCg5syZo7vvvlu7d+/WNddcow4dOujJJ5/UzJkz9eyzz6p58+aS5Pj3fD///LPuvvtuffvtt0pLS1NUVJSWL1+uRx99VPn5+Xrqqaec6i9ZskQnT57UH/7wB3l4eGjatGnq2bOnvvvuO/n4+EiSkpKStGvXLg0ePFiNGzdWXl6eMjIylJ2drcaNG1fYj+eee0433nij5s2bp/HjxysqKkpNmzaV9Mu5Iv3791e7du2Unp6u3Nxcvfrqq/r000/15ZdfOo24nD17VgkJCbrzzjv10ksv6ZprrqlwfZeiX79+evbZZ7Vu3To98cQTF6w3btw4jR07VrfffrvGjx8vX19fbd26VRs3blTnzp01Y8YMDR48WEFBQXruueckSeHh4Rdsz5XtLSkpUUJCgmJjY/XSSy9p/fr1evnll9W0aVMNGjTIUe/VV19V9+7dlZycrKKiIr3zzjt68MEHtXLlynKv/40bN2rZsmVKS0tT3bp1FRUVpYcffljTpk3T8ePHFRoa6qj74Ycfym63X9LISHFxcYXvj4GBgY4RqopMmjRJo0ePVu/evfX444/r2LFjmjVrljp06FBuf5w4cUJdu3ZV37599eCDD2rOnDnq27evFi9erCFDhuiPf/yjfv/73+vFF19Ur169dPjwYdWqVUuSlJubq/bt28vDw0NpaWmqV6+eVq9erQEDBshut2vIkCFO/ZoyZYo8PT319NNPq6CgQNOmTVNycrK2bt0q6ZfndEFBgY4cOeJ4Dw4KCrrgdhYWFkpSuX1R9hzOysq64LI1lrsT0tXgQt9az51+bQTllltu+dVvGBc6B+X99983kszEiROdynv16mU8PDzMt99+a4wxJisry0gyQ4YMcar36KOPXnAE5aGHHiq3vp9++qlc2f/93/8ZSWbz5s3l2jj329XZs2fNddddZzw8PMyUKVMc5SdOnDABAQFO+6QiO3bsMJLM448/7lT+9NNPG0lm48aNjrKyb5iX6qWXXjIBAQHGbrcbY4z55ptvjCTz3nvvOdXr0KGDqVWrljl06JBT+bmjVRc7B+X8Yz9q1Cjj4+Njjh8/7igrLCw0ISEh5rHHHnOUVbTfMzMzjSTzv//7v46yi52Dcv4IyowZM4wks2jRIkdZUVGRiYuLM0FBQY59UTaCUqdOHad+fvDBB06jPCdOnHCMtLiqohGNoqIiExYWZlq0aOF07sfKlSuNJDNmzBhHWdko48iRIyu9vvPZbDbTunVrx+Pzv+Hv37/feHp6mv/5n/8pdx7Juc+HC52Dcv4ISmW2d/z48U5ttm7d2rRp08ap7PznTlFRkWnRooXp1KmTU7kk4+npWe5b/L59+4wkM2fOHKfy7t27m8aNG//quVoVjSKVTenp6Y565+/fgwcPGi8vLzNp0iSn9nbu3Gm8vb2dystGLJYsWeIo27t3r2ObPvvsM0f52rVry42qDhgwwNSvX7/cSHDfvn2NzWZz7MOyY9a8eXOn87leffVVI8ns3LnTUebKOSgrVqwwkszbb7/tVD537lwjybRo0eKS2qlJuIrnN/T6668rIyOj3HQpvxuGhIRo165d2r9/v8vr/cc//iEvLy89+eSTTuXDhw+XMUarV6+W9MslnJL0pz/9yane4MGDL9j2H//4x3Jl5yb8M2fO6IcfflD79u0lSV988UW5+o8//rjj/15eXmrbtq2MMRowYICjPCQkRDfeeKO+++67C/ZF+mVbJWnYsGFO5cOHD5ckrVq16qLLX8zixYuVmJjo+EbVrFkztWnTRosXL3bUOXbsmDZv3qzHHntMDRs2dFq+spdH9unTR8XFxXr33XcdZevWrVN+fr769OnjKDt3vxcXF+vHH3/U9ddfr5CQkAr3+6X4xz/+oYiICD300EOOMh8fHz355JM6deqUNm3aVK6vtWvXdjy+6667JMlx3MrO+fn444914sSJSvXpXJ9//rny8vL0pz/9yek8iMTEREVHR1d4vM8dObhcQUFBF72a5/3331dpaanGjBkjT0/nt9vKPB8qs73nv0bvuuuucq+jc587J06cUEFBge66664KnzcdO3ZUTEyMU9kNN9yg2NhYp9fC8ePHtXr1aiUnJ1/StsbGxlb4/njuc+987777rkpLS9W7d2/98MMPjikiIkLNmjXTRx995FQ/KChIffv2dTy+8cYbFRISoubNmys2NtapL9J/n7fGGK1YsULdunWTMcZpXQkJCSooKCi3r/r37+80snr+a8FV999/vxo1aqSnn35a7777rg4dOqRly5bpueeek7e3t37++edKtWtl/MTzG7rtttucTrYrU7t27QqHNs81fvx4PfDAA7rhhhvUokUL3XffferXr98lhZtDhw4pMjLS8cFapmxY/9ChQ45/PT09FRUV5VTv+uuvv2Db59eVfnljGjdunN555x3HiY1lCgoKytU//4PcZrPJ39/f8dPHueU//vjjBfty7jac3+eIiAiFhIQ4ttVVe/bs0ZdffqlHHnlE3377raP87rvv1uuvvy673a7g4GDHm09VXDZe5pZbblF0dLSWLl3qCG1Lly5V3bp11alTJ0e9n3/+Wenp6Zo/f76+//57x09uUsX7/VIcOnRIzZo1K/fhev5zp8z5x7IsrJSFET8/P02dOlXDhw9XeHi42rdvr65du+qRRx5RREREpfon/fJBc77o6Gh98sknTmXe3t667rrrXF7PhZw6dUphYWEXnP/vf/9bnp6e5T7QK8vV7fX39y/302Ht2rXLhcOVK1dq4sSJ2rFjh+OnBKniEFXRa16SHnnkEaWlpenQoUNq1KiRli9fruLiYvXr1++Stq1u3bqKj4+/pLpl9u/fL2OMmjVrVuH8sp8Vy1x33XXltslms6lBgwblyqT/Pm+PHTum/Px8zZs3T/PmzatwXee/1/3aa8FV/v7+WrVqlXr37q2kpCRJv7yepk2bpkmTJl3056GaioBSQ3To0EH//ve/9cEHH2jdunX661//qunTp2vu3LlOIxC/tYp+G+7du7e2bNmiESNGqFWrVgoKClJpaanuu+8+lZaWlqvv5eV1SWWSnD50L6aqb+a0aNEiSdLQoUM1dOjQcvNXrFih/v37V+k6z9WnTx9NmjRJP/zwg2rVqqW///3veuihh5yuGBk8eLDmz5+vIUOGKC4uTjabTR4eHurbt2+F+706XMpxGzJkiLp166b3339fa9eu1ejRo5Wenq6NGzeqdevW1do/Pz+/cmGrso4cOaKCgoKLBnh3u9DxONc///lPde/eXR06dNDs2bNVv359+fj4aP78+VqyZEm5+hc6H6Rv374aOnSoFi9erGeffVaLFi1S27ZtKwxTVaW0tFQeHh5avXp1hdt6/of2hfbHrz1vy14/Dz/8cLlzwcqc/2Xxct/DKnLTTTfp66+/1u7du3XixAnFxMQoICBAQ4cOrfKrCa2AgFKDhIaGqn///urfv79OnTqlDh06aOzYsY6AcqEP5UaNGmn9+vU6efKk0yjK3r17HfPL/i0tLdWBAwecvpGcO2Lwa06cOKENGzZo3LhxGjNmjKO8Mj9NVUbZNuzfv9/pxM/c3Fzl5+c7ttUVxhgtWbJE99xzT7mfvyRpwoQJWrx4sfr3768mTZpIkr7++uuLtulqgOrTp4/GjRunFStWKDw8XHa73WmoWpL+9re/KSUlRS+//LKj7MyZM+VuBufKuhs1aqR//etfKi0tdfpgP/+546qmTZtq+PDhGj58uPbv369WrVrp5ZdfdgRBV/onSfv27XMaTSorq2z/LkXZyehlJylXpGnTpiotLdXu3bsveqfiSz0m1bG9K1askL+/v9auXet0ifv8+fNdaic0NFSJiYlavHixkpOT9emnn7p0E7LKaNq0qYwxioqK0g033FBt66lXr55q1aqlkpISl0d5LqYyX6Q8PDx00003OR7/4x//UGlpaZX2yyo4B6WGOP+njaCgIF1//fVOw7Fl93M4/wPp/vvvV0lJiV577TWn8unTp8vDw0NdunSR9N832tmzZzvVmzVr1iX3s+xbw/nfEqr7jarM/fffX+H6XnnlFUm66BVJF/Lpp5/q4MGD6t+/v3r16lVu6tOnjz766CMdPXpU9erVU4cOHfTWW28pOzvbqZ1z98mFjtWFNG/eXC1bttTSpUu1dOlS1a9fv9zVTF5eXuX2+6xZs1RSUuJU5sq677//fuXk5Gjp0qWOsrNnz2rWrFkKCgpy+VvbTz/9pDNnzjiVNW3aVLVq1XJ6Ll+qtm3bKiwsTHPnznVafvXq1dqzZ0+ljvel2LhxoyZMmKCoqCglJydfsF6PHj3k6emp8ePHlxvFOv/5cCnHozq218vLSx4eHk7Pk4MHD+r99993ua1+/fpp9+7dGjFihLy8vMqF6KrWs2dPeXl5ady4ceWe+8aYX/1J+FJ5eXkpKSlJK1asqPDLx7FjxyrVbmBgYKV/fpV++Vl39OjRql+//kXP1ampGEGpIWJiYnT33XerTZs2Cg0N1eeff66//e1vSktLc9Rp06aNJOnJJ59UQkKC4w2iW7duuueee/Tcc8/p4MGDuuWWW7Ru3Tp98MEHGjJkiONyzTZt2igpKUkzZszQjz/+6LjM+JtvvpF0aWk/ODhYHTp00LRp01RcXKxrr71W69at04EDB6phr5R3yy23KCUlRfPmzVN+fr46duyobdu2aeHCherRo4fuuecel9tcvHixvLy8Lvjm3717dz333HN65513NGzYMM2cOVN33nmnbr31Vg0cOFBRUVE6ePCgVq1apR07dkj677F67rnn1LdvX/n4+Khbt24XvWlYnz59NGbMGPn7+2vAgAHlfqro2rWr3n77bdlsNsXExCgzM1Pr169XnTp1nOq1atVKXl5emjp1qgoKCuTn56dOnTpVeC7FwIED9cYbb+jRRx9VVlaWGjdurL/97W+Ob8fnn9f0a7755hvde++96t27t2JiYuTt7a333ntPubm5lfow8/Hx0dSpU9W/f3917NhRDz30kOOy28aNG1f4c5yrVq9erb179+rs2bPKzc3Vxo0blZGRoUaNGunvf//7RW9Sdv311+u5557ThAkTdNddd6lnz57y8/PT9u3bFRkZqfT0dEm/PB/mzJmjiRMn6vrrr1dYWFi5EZLq2t7ExES98soruu+++/T73/9eeXl5ev3113X99dfrX//6l8tt1alTR8uXL1eXLl0uen7O+b7//vsKR9CCgoLUo0ePCpdp2rSpJk6cqFGjRungwYPq0aOHatWqpQMHDui9997TwIED9fTTT7u0DRcyZcoUffTRR4qNjdUTTzyhmJgYHT9+XF988YXW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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Plot a histogram\n",
    "import matplotlib.pyplot as plt\n",
    "for x in range(10):\n",
    "    max_elements = (dictionary_activations[:, max_indices[x]]>0.01)\n",
    "    plt.hist(dictionary_activations[max_elements, max_indices[x]], bins=20)\n",
    "    plt.title('Histogram of Activations for Dictionary Element ' + str(x))\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "vscode": {
     "languageId": "shellscript"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "21994\n",
      "10\n",
      "62\n",
      "842\n",
      "157\n",
      "119\n",
      "943\n",
      "152\n",
      "10126\n",
      "1282\n"
     ]
    }
   ],
   "source": [
    "#Plot a histogram\n",
    "import matplotlib.pyplot as plt\n",
    "for x in range(10):\n",
    "    print((dictionary_activations[:, max_indices[x]] > 0.01).sum().item())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
